Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. Weโ€™ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[FE] CD test #233

Merged
merged 5 commits into from
Aug 7, 2024
Merged

[FE] CD test #233

merged 5 commits into from
Aug 7, 2024

Conversation

chysis
Copy link
Contributor

@chysis chysis commented Aug 7, 2024

  • resolves #

๐Ÿš€ ์–ด๋–ค ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ–ˆ๋‚˜์š” ?

  • AWS Codebuild, pipeline ๊ตฌ์ถ• ๋ฐ lambda๋ฅผ ์‚ฌ์šฉํ•ด Cloudfront์˜ ์บ์‹œ ๋ฌดํšจํ™”

๐Ÿ”ฅ ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ–ˆ๋‚˜์š” ?

๐Ÿ“ ์–ด๋–ค ๋ถ€๋ถ„์— ์ง‘์ค‘ํ•ด์„œ ๋ฆฌ๋ทฐํ•ด์•ผ ํ• ๊นŒ์š”?

๐Ÿ“š ์ฐธ๊ณ  ์ž๋ฃŒ, ํ•  ๋ง

Copy link
Contributor

@ImxYJL ImxYJL left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

์ด์ œ ๋…ธ๊ฐ€๋‹ค ์ž‘์—…์„ ํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค๋‹ˆ...์ •๋ง ํ–‰๋ณตํ•˜๋„ค์š”

Copy link
Contributor

@BadaHertz52 BadaHertz52 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

์ œ๋ฐœ cd ๋˜๊ฒŒ ํ•ด์ฃผ์„ธ์š”

Copy link
Contributor

@soosoo22 soosoo22 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CD๋ฅผ ์ด๋ ‡๊ฒŒ๋‚˜ ๋น ๋ฅด๊ฒŒ!!!

@chysis chysis merged commit 38b6dc7 into develop Aug 7, 2024
5 checks passed
chysis added a commit that referenced this pull request Aug 21, 2024
* [FE] ํ”„๋ก ํŠธ์—”๋“œ ์ดˆ๊ธฐ ์„ธํŒ… (#5)

* ci: webpack, react, typescript ์„ค์ •

* ci: eslint, prettier, stylelint ์„ค์ •

* [BE] feat: ์ดˆ๊ธฐ ํ™˜๊ฒฝ ์„ค์ • (#8)

* feat: ์ดˆ๊ธฐ ํ™˜๊ฒฝ ์„ค์ •

* refactor: ํด๋ž˜์Šค ์ข…๋ฃŒ ์ „ ๊ฐœํ–‰ ์ œ๊ฑฐ

* build: application.yml ์„ค์ •

* [BE] feat: ์ดˆ๊ธฐ ์—”ํ‹ฐํ‹ฐ ์ž‘์„ฑ (#10)

* feat: ์ดˆ๊ธฐ ์—”ํ‹ฐํ‹ฐ ์ž‘์„ฑ

* refactor: ๋ฆฌ๋ทฐ ๋‚ด์šฉ๊ณผ ๋ฆฌ๋ทฐ๋ฅผ ๋‹ค๋Œ€์ผ ์—ฐ๊ฒฐ

* refactor: ํŒจํ‚ค์ง€ ๊ตฌ์กฐ ๊ณ ๋ คํ•˜์—ฌ ProjectGroup์œผ๋กœ ์ˆ˜์ •

* refactor: Project -> Reviewer๋กœ ๋ณ€๊ฒฝ

* refactor: ํ…Œ์ด๋ธ”๋ช… ์ผ์น˜ (reviewer_group)

* [BE] feat: ๋ฆฌ๋ทฐ ์ž‘์„ฑ (#15)

* feat: ์ดˆ๊ธฐ ์—”ํ‹ฐํ‹ฐ ์ž‘์„ฑ

* refactor: ๋ฆฌ๋ทฐ ๋‚ด์šฉ๊ณผ ๋ฆฌ๋ทฐ๋ฅผ ๋‹ค๋Œ€์ผ ์—ฐ๊ฒฐ

* refactor: ํŒจํ‚ค์ง€ ๊ตฌ์กฐ ๊ณ ๋ คํ•˜์—ฌ ProjectGroup์œผ๋กœ ์ˆ˜์ •

* refactor: Project -> Reviewer๋กœ ๋ณ€๊ฒฝ

* refactor: ํ…Œ์ด๋ธ”๋ช… ์ผ์น˜ (reviewer_group)

* feat: ๋ฉค๋ฒ„ ๋ ˆํฌ์ง€ํ† ๋ฆฌ ์ƒ์„ฑ

* feat: ๋ฆฌ๋ทฐ์–ด๊ทธ๋ฃน ๋ ˆํฌ์ง€ํ† ๋ฆฌ ์ƒ์„ฑ

* feat: ๋ฆฌ๋ทฐ ๋ฌธํ•ญ ๋ ˆํฌ์ง€ํ† ๋ฆฌ ์ƒ์„ฑ

* feat: ํ‚ค์›Œ๋“œ ๋ ˆํฌ์ง€ํ† ๋ฆฌ ์ƒ์„ฑ

* feat: ๋ฆฌ๋ทฐ ํ‚ค์›Œ๋“œ ๋ ˆํฌ์ง€ํ† ๋ฆฌ ์ƒ์„ฑ

* feat: ๋ฆฌ๋ทฐ ๋ ˆํฌ์ง€ํ† ๋ฆฌ ์ƒ์„ฑ

* feat: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ๊ธฐ๋Šฅ ๊ตฌํ˜„

* test: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ๊ธฐ๋Šฅ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

---------

Co-authored-by: donghoony <[email protected]>
Co-authored-by: nayonsoso <[email protected]>

* [BE] feat: ํ…Œ์ŠคํŠธ ๋ฉ”์„œ๋“œ๋ณ„ ๊ฒฉ๋ฆฌ (#19)

* feat: ํ…Œ์ŠคํŠธ ๊ฒฉ๋ฆฌ๋ฅผ ์œ„ํ•œ DB Cleaner ๋ฐ Extension ๊ตฌํ˜„

* feat: Service์—์„œ ๊ณตํ†ต์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์–ด๋…ธํ…Œ์ด์…˜ ์ œ๊ณต

* test: ์„œ๋น„์Šค ํ…Œ์ŠคํŠธ ์–ด๋…ธํ…Œ์ด์…˜ ์‚ฌ์šฉํ•˜๋„๋ก ์ˆ˜์ •

* fix: ๋ˆ„๋ฝ๋œ ๋ฆฌ๋ทฐ ์ž‘์„ฑ ๋งคํ•‘ URL ์ถ”๊ฐ€ (#17)

* [BE] feat: ๋ฆฌ๋ทฐ ์กฐํšŒ (#22)

* feat: ๋ฆฌ๋ทฐ ์กฐํšŒ ๊ธฐ๋Šฅ ์ถ”๊ฐ€

* style: ๊ฐœํ–‰ ๋ณ€๊ฒฝ

* test: ๋ฆฌ๋ทฐ ์กฐํšŒ ๊ธฐ๋Šฅ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

* refactor: ๋ฆฌ๋ทฐ ์กฐํšŒ ๋ฉ”์„œ๋“œ๋ช… ๋ณ€๊ฒฝ

* refactor: id ํƒ€์ž… ๋ณ€๊ฒฝ

* style: ๊ฐœํ–‰ ์ˆ˜์ •

* fix: PostMapping ์ˆ˜์ •

---------

Co-authored-by: KIMGYUTAE <[email protected]>
Co-authored-by: donghoony <[email protected]>

* [BE] feat: ์ปค์Šคํ…€ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ (#20)

* feat: ์ปค์Šคํ…€ ์˜ˆ์™ธ ์ƒ์„ฑ

* feat: ์ปค์Šคํ…€ ์˜ˆ์™ธ ์ ์šฉ

* feat: ๊ธ€๋กœ๋ฒŒ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ

* [BE] feat: ๋ฆฌ๋ทฐ์–ด ๊ทธ๋ฃน ์ •๋ณด ๋ฐ ํ‚ค์›Œ๋“œ ์กฐํšŒ API (#24)

* feat: ํ‚ค์›Œ๋“œ ์กฐํšŒ API

* feat: ๋ฆฌ๋ทฐ ๊ทธ๋ฃน ์กฐํšŒ API

* refactor: PathVariable ๋ณ€์ˆ˜๋ช… ๋ณ€๊ฒฝ

* [FE] ๋ฆฌ๋ทฐ ์ž‘์„ฑํ™”๋ฉด๊ณผ ์ƒ์„ธ ๋ฆฌ๋ทฐ ๋ณด๊ธฐ ํ™”๋ฉด ๊ฒฐํ•ฉ (#26)

* fix : webpack dev sever ์—ด ๋•Œ ์˜ค๋ฅ˜ ์ˆ˜์ •

- package.json ์—์„œ type :"module" ์‚ญ์ œ , stylelint ๊ด€๋ จ ์„ค์ • ์‚ญ์ œ

Co-Authored-By: ImxYJL <[email protected]>

* ci : svgํŒŒ์ผ ๊ด€๋ จ ํ™˜๊ฒฝ ์…‹ํŒ…

Co-Authored-By: ImxYJL <[email protected]>

* design : reset ์Šคํƒ€์ผ, global style์—์„œ ํฐํŠธ ์ ์šฉ

Co-Authored-By: ImxYJL <[email protected]>

* feat: ๋ฆฌ๋ทฐ ์ž ๊ธˆ ๋ฒ„ํŠผ ์ถ”๊ฐ€

Co-Authored-By: ImxYJL <[email protected]>

* feat: ์ƒ์„ธ ๋ฆฌ๋ทฐ ๋ณด๊ธฐ ํ™”๋ฉด์˜ ์งˆ๋ฌธ,๋‹ต ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€

Co-Authored-By: ImxYJL <[email protected]>

* feat: ์ƒ์„ธ ๋ฆฌ๋ทฐ ๋ณด๊ธฐ ํ™”๋ฉด์˜ ํ”„๋กœ์ ํŠธ ์„ค๋ช… ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€

Co-Authored-By: ImxYJL <[email protected]>

* feat : ์ƒ์„ธ ๋ฆฌ๋ทฐ ๋ณด๊ธฐ ํ™”๋ฉด ํŽ˜์ด์ง€ ์ถ”๊ฐ€ ๋ฐ ์ƒ์„ธ ๋ฆฌ๋ทฐ ๋ฐ์ดํ„ฐ ํƒ€์ž… ์ถ”๊ฐ€

Co-Authored-By: ImxYJL <[email protected]>

* fix: webpack dev server ์—ด ๋•Œ ์˜ค๋ฅ˜ ์ˆ˜์ •

Co-authored-by: soosoo22 <[email protected]>

* design: reset css ์ ์šฉ

Co-authored-by: soosoo22 <[email protected]>

* feat: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํŽ˜์ด์ง€ ๊ตฌํ˜„

Co-authored-by: soosoo22 <[email protected]>

* ci: svg ํŒŒ์ผ ๊ด€๋ จ ์„ค์ •

* fix : ๋จธ์ง€์ถฉ๋Œ ํ•ด๊ฒฐ ๋ฐ ์˜คํƒ€ ์ˆ˜์ •

* feat: react-router-dom, react-router ์„ค์น˜ ๋ฐ ์„ค์ •

* refactor: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํŽ˜์ด์ง€์™€ ์ƒ์„ธ ๋ฆฌ๋ทฐ ๋ณด๊ธฐ ํŽ˜์ด์ง€ ๊ฒฐํ•ฉ ๋ฐ ๋ฆฌํŒฉํ† ๋ง

* refactor: ๋ฆฌ๋ทฐ ํƒ€์ž… ํŒŒ์ผ ๋ฆฌํŒฉํ† ๋ง ๋ฐ ํƒ€์ž… ์ถ”๊ฐ€

* feat: api ์„ค์ • ์ถ”๊ฐ€ ๋ฐ ์ƒ์„ธ ๋ฆฌ๋ทฐ ๋ณด๊ธฐ ํŽ˜์ด์ง€์— api ํ•ธ๋“ค๋Ÿฌ ์ถ”๊ฐ€

---------

Co-authored-by: ImxYJL <[email protected]>
Co-authored-by: chysis <[email protected]>
Co-authored-by: soosoo22 <[email protected]>

* [BE] refactor: ํŒจํ‚ค์ง€ ๊ตฌ์กฐ ๋ฆฌํŒฉํ„ฐ๋ง (#30)

* refactor: ํŒจํ‚ค์ง€ ๊ตฌ์กฐ ๊ตฌ์ฒดํ™”

* refactor: ํŒจํ‚ค์ง€ ๊ตฌ์กฐ ๊ตฌ์ฒดํ™”(์„œ๋น„์Šค, ์ปจํŠธ๋กค๋Ÿฌ, ๋ ˆํฌ์ง€ํ† ๋ฆฌ)

* [BE] feat: ๋ฆฌ๋ทฐ์–ด ๊ทธ๋ฃน ์„ค๋ช… ์ž‘์„ฑ, ๋งˆ๊ฐ ๊ธฐํ•œ ๋ฐ ๊ฒ€์ฆ ๋กœ์ง ์ถ”๊ฐ€ (#34)

* feat: BadRequestException ์ถ”๊ฐ€

* feat: ๋ฆฌ๋ทฐ์–ด ๊ทธ๋ฃน ์ด๋ฆ„, ์„ค๋ช… ๊ธธ์ด ๊ฒ€์ฆ

* [FE] design: theme ,์ „์—ญ ์Šคํƒ€์ผ์„ ์„ค์ • (#41)

* chore: ๋ถˆํ•„์š”ํ•œ ํŒŒ์ผ ์‚ญ์ œ

Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: soosoo22 <[email protected]>
Co-Authored-By: Fe <[email protected]>

* design: theme ์ƒ์„ฑ

- ์ƒ‰์ƒ, ํฐํŠธ ์‚ฌ์ด์ฆˆ, ํฐํŠธ wieght ์„ค์ •

Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: soosoo22 <[email protected]>
Co-Authored-By: Fe <[email protected]>

* design: emotion ThemeProvider ์ ์šฉ ๋ฐ Theme ํƒ€์ž… ํ™•์žฅ

- emotion์—์„œ ์ œ๊ณตํ•˜๋Š” Theme ํƒ€์ž…์ด ๋นˆ ๊ฐ์ฒด์—ฌ์„œ ์ฝ”๋“œ์—์„œ ์‚ฌ์šฉํ•˜๋Š” theme์— ๋งž๊ฒŒ ํƒ€์ž…์„ ํ™•์žฅํ•จ

Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: soosoo22 <[email protected]>
Co-Authored-By: Fe <[email protected]>

* design : rem ์…‹ํŒ… ๋ฐ reset.css๋ฅผ globalStyle์— ์ ์šฉ

Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: soosoo22 <[email protected]>
Co-Authored-By: Fe <[email protected]>

* chore: App์—์„œ ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ ์‚ญ์ œ

Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: soosoo22 <[email protected]>
Co-Authored-By: Fe <[email protected]>

---------

Co-authored-by: ImxYJL <[email protected]>
Co-authored-by: soosoo22 <[email protected]>
Co-authored-by: Fe <[email protected]>

* [FE] ci: ๋ฆฌ์•กํŠธ ์ฟผ๋ฆฌ ๋ฐ msw ์„ค์น˜, eslint import rule ์ถ”๊ฐ€ ๋ฐ ์ ์šฉ (#44)

* ci: eslint ์˜ค๋ฅ˜ ์ˆ˜์ • ๋ฐ import rule ์ถ”๊ฐ€ ๋ฐ ๊ด€๋ จ ํ”Œ๋Ÿฌ๊ทธ์ธ ์„ค์น˜

- eslint-config-prettier
- eslint-plugin-import

Co-Authored-By: badahertz52 <[email protected]>
Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: Fe <[email protected]>

* style: eslint ์ ์šฉ์œผ๋กœ ์ธํ•œ ์ฝ”๋“œ ํฌ๋งทํŒ… ๋ณ€๊ฒฝ

import ์ˆœ์„œ ์ ์šฉ

Co-Authored-By: badahertz52 <[email protected]>
Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: Fe <[email protected]>

* ci: msw ์„ค์น˜

Co-Authored-By: badahertz52 <[email protected]>
Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: Fe <[email protected]>

---------

Co-authored-by: badahertz52 <[email protected]>
Co-authored-by: ImxYJL <[email protected]>
Co-authored-by: Fe <[email protected]>

* [BE] docs: Swagger๋ฅผ ํ™œ์šฉํ•œ API ๋ฌธ์„œ ์ž๋™ํ™” (#31)

* chore: swagger-ui ์„ค์ • ์ถ”๊ฐ€

* feat: swaggerConfig ์ถ”๊ฐ€

* docs: ์ปจํŠธ๋กค๋Ÿฌ์— swagger ์–ด๋…ธํ…Œ์ด์…˜ ์ถ”๊ฐ€

* docs: dto์— swagger ์–ด๋…ธํ…Œ์ด์…˜ ์ถ”๊ฐ€

* chore: api ๋ฌธ์„œ ์„ค์ • ํŒŒ์ผ ์ถ”๊ฐ€

* refactor: SwaggerConfig info ์„ค์ • ํŒŒ์ผ ๋ณ€์ˆ˜ ์ฐธ์กฐํ•˜๋„๋ก ๋ณ€๊ฒฝ

* docs: api ๋ฌธ์„œ์— ์ƒํƒœ์ฝ”๋“œ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋…ธ์ถœ๋˜๋„๋ก ๋ณ€๊ฒฝ

* chore: api ๋ฌธ์„œ ํŒŒ์ผ๋ช… ๋ณ€๊ฒฝ

* chore: api-docs ํ”„๋กœํผํ‹ฐ๋ช… ๋ณ€๊ฒฝ

* refactor: ํ”„๋กœํผํ‹ฐ ์ •๋ณด์™€ ์„ค์ • ํด๋ž˜์Šค ๋ถ„๋ฆฌ

* refactor: ์ปจํŠธ๋กค๋Ÿฌ ๋‚ด swagger ์–ด๋…ธํ…Œ์ด์…˜ ๋ถ„๋ฆฌ

---------

Co-authored-by: KIMGYUTAE <[email protected]>

* [BE] feat: ๋ฆฌ๋ทฐ ๋„๋ฉ”์ธ ๊ตฌ์ฒดํ™”, ์ •์ฑ… ๊ตฌํ˜„  (#43)

* feat: dto ๊ฒ€์ฆ์„ ์œ„ํ•œ ์˜์กด์„ฑ ์ถ”๊ฐ€

* feat: dto์— jakarta validation ์–ด๋…ธํ…Œ์ด์…˜ ์ถ”๊ฐ€

* feat: ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ์š”์ฒญ์„ ๊ฒ€์ฆํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค์ •

* feat: FieldError ๋‚ด์šฉ์„ ๋ณด์—ฌ์ค„ ์‘๋‹ต ๊ฐ์ฒด ์ƒ์„ฑ

* feat: FieldError ํ•ธ๋“ค๋Ÿฌ ์ถ”๊ฐ€

* refactor: ๋ฌธ์ž์—ด ๊ณต๋ฐฑ ๊ฒ€์ฆ์„ ์œ„ํ•ด NotBlank ์‚ฌ์šฉ

* style: todo ์ฃผ์„ ์ถ”๊ฐ€

* feat: ๋ฐ๋“œ๋ผ์ธ์ด ์ง€๋‚˜๋ฉด ๋ฆฌ๋ทฐ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์—†๋„๋ก ํ•˜๋Š” ๊ธฐ๋Šฅ ์ถ”๊ฐ€

* refactor: ์‚ฌ์ด์ฆˆ ๊ฒ€์ฆ๋ฌธ ์ œ๊ฑฐ

* style: ๊ฐœํ–‰ ๋ณ€๊ฒฝ

* refactor: ์˜ˆ์™ธ ์ด๋ฆ„์„ ๊ณผ๊ฑฐํ˜•์œผ๋กœ ๋ณ€๊ฒฝ

* refactor: RFC 9457 ํ˜•์‹์„ ์ง€ํ‚ค๋ฉด์„œ ํ•„๋“œ ์—๋Ÿฌ ์ •๋ณด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ์ˆ˜์ •

* chore: ์˜คํƒ€ ์ˆ˜์ •

* fix: conflict ํ•ด๊ฒฐ

* feat: dto์— jakarta validation ์–ด๋…ธํ…Œ์ด์…˜ ์ถ”๊ฐ€

* refactor: ๋ฌธ์ž์—ด ๊ณต๋ฐฑ ๊ฒ€์ฆ์„ ์œ„ํ•ด NotBlank ์‚ฌ์šฉ

* refactor: ์‚ฌ์ด์ฆˆ ๊ฒ€์ฆ๋ฌธ ์ œ๊ฑฐ

* [BE] feat: ํ‚ค์›Œ๋“œ ๋„๋ฉ”์ธ ๊ตฌ์ฒดํ™”, ์ •์ฑ… ๊ตฌํ˜„ (#40)

* feat: ํ‚ค์›Œ๋“œ ์ผ๊ธ‰ ์ปฌ๋ ‰์…˜ ๋ฐ ์ œ์•ฝ์‚ฌํ•ญ ๊ตฌํ˜„

* build: ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์—์„œ Lombok ์˜์กด์„ฑ ์ถ”๊ฐ€

* feat: ๋ฆฌ๋ทฐ์— ์ถ”๊ฐ€๋œ ํ‚ค์›Œ๋“œ ์‚ญ์ œ

* feat: ๋ฆฌ๋ทฐ์— ํ‚ค์›Œ๋“œ ์ถ”๊ฐ€

* feat: ์ผ๊ธ‰ ์ปฌ๋ ‰์…˜์˜ ์ด๋ฆ„์„ SelectedKeywords๋กœ ๋ณ€๊ฒฝ

* refactor: ํ‚ค์›Œ๋“œ ๊ฐœ์ˆ˜ ์ •์ฑ… 5๊ฐœ ๋ฐ˜์˜

* refactor: ์ค‘๋ณต ํ‚ค์›Œ๋“œ ๋ฉ˜ํŠธ ์ˆ˜์ •

* refactor: `deleteAll`๋กœ ๋ฉ”์„œ๋“œ๋ช… ์ˆ˜์ •

* refactor: `duplicated` -> `duplicate`๋กœ ์ˆ˜์ •

* refactor: ํ‚ค์›Œ๋“œ ๋™๋“ฑ์„ฑ ๋น„๊ต

* test: ํ‚ค์›Œ๋“œ ๋“ฑ๋ก ์‹œ ๊ธฐ์กด ํ‚ค์›Œ๋“œ ์‚ญ์ œ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ

* refactor: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํ•„๋“œ ์‚ญ์ œ

* style: add newlines between comments

* refactor: ํ‚ค์›Œ๋“œ ID ๊ธฐ๋ฐ˜ ๋น„๊ต

* refactor: id๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ detail ๋น„๊ต

* refactor: ํ‚ค์›Œ๋“œ ํ…Œ์ŠคํŠธ ๋„๋ฉ”์ธ ๊ธฐ๋ฐ˜์œผ๋กœ ์ˆ˜์ •

* [BE] feat: ๋ฆฌ๋ทฐ์–ด ๊ทธ๋ฃน ๋„๋ฉ”์ธ ๊ตฌ์ฒดํ™”, ์ •์ฑ… ๊ตฌํ˜„ (#45)

* feat: Member ์—”ํ‹ฐํ‹ฐ์— GitHub ID ์†์„ฑ ์ถ”๊ฐ€

* feat: ์ž‘์„ฑํ•œ ๋ฆฌ๋ทฐ์–ด๊ฐ€ ๋ฆฌ๋ทฐ์–ด ๊ทธ๋ฃน์— ์†ํ•˜๋Š”์ง€ ๊ฒ€์ฆ

* feat: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ์‹œ, ์ด๋ฏธ ์ž‘์„ฑํ•œ ๋ฆฌ๋ทฐ๊ฐ€ ์žˆ์ง€ ์•Š์€์ง€ ๊ฒ€์ฆ

* refactor: Review ์—”ํ‹ฐํ‹ฐ์˜ reviewer์™€์˜ ์—ฐ๊ด€๊ด€๊ณ„ ManyToOne์œผ๋กœ ๋ณ€๊ฒฝ

* refactor: ์ปฌ๋Ÿผ๋ช… ์˜ค๋ฅ˜ ์ˆ˜์ •

* refactor: gitHub ํ‘œ๊ธฐ -> github์œผ๋กœ ๋ณ€๊ฒฝ

* refactor: GithubReviewGroup -> GithubReviewGroup ํด๋ž˜์Šค๋ช… ๋ณ€๊ฒฝ

* refactor: ๋ˆ„๋ฝ๋œ @Column ์ถ”๊ฐ€

* test: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํ…Œ์ŠคํŠธ ์‹œ, ๊นƒํ—™ ์‚ฌ์šฉ์ž ๊ทธ๋ฃน ๋ฐ์ดํ„ฐ ์ €์žฅ ๋ถ€๋ถ„ ์ถ”๊ฐ€

* refactor: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ์‹œ, ์ค‘๋ณต ๋ฆฌ๋ทฐ ๊ฒ€์ฆ ๋กœ์ง ์ˆ˜์ •

* refactor: GithubReviewerGroupNotFoundException์„ UnAuthorizedException ๊ตฌํ˜„ํ•˜๋„๋ก ์ˆ˜์ •

* refactor: ReviewContentExistException -> ReviewAlreadySubmittedException ํด๋ž˜์Šค๋ช… ๋ณ€๊ฒฝ

* feat: UnAuthorizedException ์ถ”๊ฐ€

* refactor: ๋ฉ”์„œ๋“œ ์ˆœ์„œ ๋ณ€๊ฒฝ

* test: ๋ถˆํ•„์š”ํ•œ given์ ˆ ์‚ญ์ œ

* test: ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ๋ฐ์ดํ„ฐ ์‚ฝ์ž… repository๋ฅผ ํ™œ์šฉํ•˜๋„๋ก ๋ณ€๊ฒฝ

---------

Co-authored-by: Donghoon Lee <[email protected]>

* [FE] ๋ฆฌ๋ทฐ ์“ฐ๊ธฐ ํŽ˜์ด์ง€์— ํ™•์ •๋œ ๋””์ž์ธ์„ ๋ฐ˜์˜ํ•˜๊ณ , ๋ฆฌํŒฉํ„ฐ๋งํ•œ๋‹ค. (#53)

* fix: eslint์—์„œ ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ์ฝ์ง€ ๋ชปํ•˜๋Š” ์˜ค๋ฅ˜ ์ˆ˜์ •

์ ˆ๋Œ€ ๊ฒฝ๋กœ ์ง€์ •

Co-Authored-By: ImxYJL <[email protected]>

* design: ์‹œ์Šคํ…œ ๊ธฐ๋ณธ ํฐํŠธ ํฌ๊ธฐ ์ง€์ •

Co-Authored-By: ImxYJL <[email protected]>

* chore: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” import ์ œ๊ฑฐ

emotion.ts์—์„œ theme ์ œ๊ฑฐ

Co-Authored-By: ImxYJL <[email protected]>

* feat: ๊ณตํ†ต ๋ฒ„ํŠผ ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„

Co-Authored-By: ImxYJL <[email protected]>

* feat: ํ‚ค์›Œ๋“œ ๋ฒ„ํŠผ ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„

Co-Authored-By: ImxYJL <[email protected]>

* feat: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํŽ˜์ด์ง€ ํผ๋ธ”๋ฆฌ์‹ฑ ๋ฐ ์ปดํฌ๋„ŒํŠธ ๋ถ„๋ฆฌ

Co-Authored-By: ImxYJL <[email protected]>

* feat: ๋ฆฌ๋ทฐ์ด ์ฝ”๋ฉ˜ํŠธ ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„

Co-Authored-By: ImxYJL <[email protected]>

* refactor: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํŽ˜์ด์ง€์—์„œ ๋ฆฌ๋ทฐ ์•„์ดํ…œ ์ปดํฌ๋„ŒํŠธ ๋ถ„๋ฆฌ

Co-Authored-By: ImxYJL <[email protected]>

* refactor: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํŽ˜์ด์ง€ ๋ฆฌํŒฉํ„ฐ๋ง

- ๋ฆฌ๋ทฐ์ด ์ฝ”๋ฉ˜ํŠธ ์ถ”๊ฐ€
- ๋ฆฌ๋ทฐ ์•„์ดํ…œ ์ปดํฌ๋„ŒํŠธ ๋ถ„๋ฆฌ
- ๋ถ€๊ฐ€์ ์ธ ์Šคํƒ€์ผ๋ง

Co-Authored-By: ImxYJL <[email protected]>

---------

Co-authored-by: ImxYJL <[email protected]>

* [FE] feat: sidebar  ๋ฆฌํŒฉํ† ๋ง ๋ฐ ๊ธฐ๋Šฅ ์ถ”๊ฐ€  , topbar ์ถ”๊ฐ€, ๋ฐ˜์‘ํ˜• ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ ์ ์šฉ (#55)

* style: globalStyles.ts์—์„œ ๊ฒฝ๋กœ ๊ณต๋ฐฑ ์ถ”๊ฐ€

* docs: ๋ถˆํ•„์š”ํ•œ import ์‚ญ์ œ

Co-Authored-By: soosoo22 <[email protected]>

* design : theme ์ถ”๊ฐ€

- ์ถ”๊ฐ€๋œ theme : breakpoints, sidebarWidth

Co-Authored-By: soosoo22 <[email protected]>

* chore: Header ์ปดํฌ๋„ŒํŠธ ์‚ญ์ œ

Co-Authored-By: soosoo22 <[email protected]>

* feat : Topbar ์ƒ์„ฑ, logo ์ด๋ฏธ์ง€ ๋ณ€๊ฒฝ ๋ฐ SearchInput ์ƒ์„ฑ

- logo ์ด๋ฏธ์ง€ ๋ณ€๊ฒฝ
- Topbar์— ๋“ค์–ด๊ฐ€๋Š” ์ปดํฌ๋„ŒํŠธ๋“ค (SidebarOpenButtion, Logo )์ƒ์„ฑ
- userProfile ์ด๋ฏธ์ง€ ์ƒ์„ฑ
- ๊ณตํ†ต ์ปดํฌ๋„ŒํŠธ : SearchInput ui ์ƒ์„ฑ

Co-Authored-By: soosoo22 <[email protected]>

* feat : ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ ์ƒ์„ฑ

- ๋ ˆ์ด์•„์›ƒ ๊ด€๋ จ ์ปดํฌ๋„ŒํŠธ๋“ค ์ƒ์„ฑ

Co-Authored-By: soosoo22 <[email protected]>

* refactor : App์— ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ ์ ์šฉ

Co-Authored-By: soosoo22 <[email protected]>

* refactor: Sidebar ๋ฆฌํŒฉํ† ๋ง

- ๋ฉ”๋‰ด๋ช… ์ƒ์ˆ˜์ฒ˜๋ฆฌ
- ํ”ผ๊ทธ๋งˆ ๋””์ž์ธ ๋ณ€๊ฒฝ์— ๋”ฐ๋ฅธ ์ˆ˜์ •

Co-Authored-By: soosoo22 <[email protected]>

* feat: sidebar ์—ด๊ณ  ๋‹ซ๋Š” ๊ธฐ๋Šฅ ์ถ”๊ฐ€

Co-Authored-By: soosoo22 <[email protected]>

---------

Co-authored-by: soosoo22 <[email protected]>

* fix: ์ปดํŒŒ์ผ ์—๋Ÿฌ ํ•ด๊ฒฐ (#60)

Co-authored-by: nayonsoso <[email protected]>

* [FE] fix : stylelint ์ ์šฉ ์˜ค๋ฅ˜ ์ˆ˜์ •  (#66)

* fix: stylelint๋ฅผ ํ†ตํ•œ css ์†์„ฑ ์ •๋ ฌ ๊ธฐ๋Šฅ ์˜ค๋ฅ˜ ์ˆ˜์ •

- stylelint ๋ฒ„์ „16๊ณผ ์ถฉ๋Œ๋˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ ์‚ญ์ œ : stylelint-config-prettier, stylelint-prettier
- css ์ •๋ ฌ์— ํ•„์š”ํ•˜์ง€ ์•Š์€ ํ”Œ๋Ÿฌ๊ทธ์ธ ์‚ญ์ œ : stylelint-config-standard, stylelint-config-styled-componented, stylelint-webpack-plugin
- ์ถ”๊ฐ€๋กœ ์„ค์น˜ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ: postcss-syntax, @stylelint/postcss-css-in-js
- stylelint ์ ์šฉ script ์ถ”๊ฐ€
- .stylelintrc.json ์ˆ˜์ • : css ๊ด€๋ จ rule ์„ค์ •

* refactor: stylelint ์ ์šฉ์— ๋”ฐ๋ฅธ css ์†์„ฑ ์ •๋ ฌ

* ci: CI ์Šคํฌ๋ฆฝํŠธ ์ž‘์„ฑ (#70)

* [BE] test: ๊นƒํ—™ ๋ฆฌ๋ทฐ์–ด ๊ทธ๋ฃน์˜ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€ ๋ฐ fixture ๋ฏธ์ ์šฉ ๋ถ€๋ถ„ ๋ณด์™„ (#68)

* test: GithubReviewerGroupRepository ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

* test: ReviewServiceTest์— ํ…Œ์ŠคํŠธ fixture ์ ์šฉ

* test: given, when, then์ ˆ ์ถ”๊ฐ€

* test: given ๋ฐ์ดํ„ฐ ์˜ค๋ฅ˜ ์ˆ˜์ •

* [BE] chore: workflow ๋””๋ ‰ํ„ฐ๋ฆฌ ์ด๋™ (#74)

* chore: workflow ๋””๋ ‰ํ„ฐ๋ฆฌ ์ด๋™

* fix: ๋ฐฑ์—”๋“œ ๋””๋ ‰ํ„ฐ๋ฆฌ๋กœ ์ด๋™

* fix: ๋ฐฑ์—”๋“œ ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์ด๋™

* fix: checkout actions์˜ ๋””๋ ‰ํ† ๋ฆฌ ์„ค์ •

* fix: ๋””๋ ‰ํ† ๋ฆฌ ์„ค์ •...

* infra: CD ํŒŒ์ดํ”„๋ผ์ธ ์ž‘์„ฑ (#76)

* fix: cd gradle ๋””๋ ‰ํ† ๋ฆฌ ์ด๋™ (#77)

* [BE] refactor: ๋‹จ๊ฑด ๋ฆฌ๋ทฐ ์กฐํšŒ ์‹œ ๋ฆฌ๋ทฐ์–ด ์ •๋ณด ์‚ญ์ œ, ๋ฆฌ๋ทฐ ์ž‘์„ฑ ์‹œ์  ์ถ”๊ฐ€ (#65)

* refactor: ๋ฆฌ๋ทฐ ์กฐํšŒ ์‹œ ๋ฆฌ๋ทฐ ์ƒ์„ฑ ์‹œ๊ฐ ์ถ”๊ฐ€, ๋ฆฌ๋ทฐ์–ด ์ •๋ณด ์‚ญ์ œ

* fix: ํ…Œ์ŠคํŠธ ์–ด๋…ธํ…Œ์ด์…˜ ํ™œ์„ฑํ™” ๋ฐ ์ˆ˜์ •

* chore: ํ…Œ์ŠคํŠธ ํด๋ž˜์Šค ํŒจํ‚ค์ง€ ์ด๋™

* refactor: ๋ถˆํ•„์š”ํ•œ given์ ˆ ์ œ๊ฑฐ

* [FE] ๋ฆฌ๋ทฐ ์ž‘์„ฑ, ์ƒ์„ธ ๋ฆฌ๋ทฐ ๋ณด๊ธฐ ํŽ˜์ด์ง€์— ๋ฐฑ์—”๋“œ API ์—ฐ๋™ ๋ฐ dotenv-webpack ์„ค์น˜, BASE_URL์„ .env๋กœ ์ด๋™ (#78)

* chore: gitignore์— yarn-error.log ์ถ”๊ฐ€

* ci: env ํŒŒ์ผ ์‚ฌ์šฉ์„ ์œ„ํ•œ dotenv-webpack ์„ค์น˜

* refactor: ์—”๋“œํฌ์ธํŠธ์— env ํŒŒ์ผ์„ ํ†ตํ•œ API_BASE_URL ๊ฒฝ๋กœ ์ ์šฉ

* fix: ๋ฆฌ๋ทฐ ์ƒ์„ธ๋ณด๊ธฐ ๋ฐ์ดํ„ฐ์—์„œ ๋ฐฑ์—”๋“œ ์‘๋‹ต๊ณผ ์†์„ฑ ์ด๋ฆ„์ด ๋‹ฌ๋ž๋˜ ๋ถ€๋ถ„ ์ˆ˜์ •

* refactor: ๋ฐฑ์—”๋“œ ์‘๋‹ต ๋ฐ ๋ฆฌํŒฉํ† ๋ง๋œ ๋ฆฌ๋ทฐ ์“ฐ๊ธฐ ํ˜•์‹์— ๋งž๊ฒŒ ๋ฆฌ๋ทฐ ์“ฐ๊ธฐ ๋ชจํ‚น ๋ฐ์ดํ„ฐ ์ˆ˜์ •

* chore: ๋ถˆํ•„์š”ํ•œ console.log ์‚ญ์ œ

* [Fe] ์ ˆ๋Œ€ ๊ฒฝ๋กœ ์‚ฌ์šฉ ์‹œ ๋ฐœ์ƒํ•˜๋Š” eslint ์˜ค๋ฅ˜๋ฅผ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.  (#81)

* fix: stylelint๋ฅผ ํ†ตํ•œ css ์†์„ฑ ์ •๋ ฌ ๊ธฐ๋Šฅ ์˜ค๋ฅ˜ ์ˆ˜์ •

- stylelint ๋ฒ„์ „16๊ณผ ์ถฉ๋Œ๋˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ ์‚ญ์ œ : stylelint-config-prettier, stylelint-prettier
- css ์ •๋ ฌ์— ํ•„์š”ํ•˜์ง€ ์•Š์€ ํ”Œ๋Ÿฌ๊ทธ์ธ ์‚ญ์ œ : stylelint-config-standard, stylelint-config-styled-componented, stylelint-webpack-plugin
- ์ถ”๊ฐ€๋กœ ์„ค์น˜ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ: postcss-syntax, @stylelint/postcss-css-in-js
- stylelint ์ ์šฉ script ์ถ”๊ฐ€
- .stylelintrc.json ์ˆ˜์ • : css ๊ด€๋ จ rule ์„ค์ •

* refactor: stylelint ์ ์šฉ์— ๋”ฐ๋ฅธ css ์†์„ฑ ์ •๋ ฌ

* fix : ์ ˆ๋Œ€ ๊ฒฝ๋กœ ์‚ฌ์šฉ ์‹œ ์˜ค๋ฅ˜ ์ˆ˜์ •

์˜ค๋ฅ˜ : eslintimport/no-unresolved

* chore: eslintrc.cjs ์—์„œ ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ ์‚ญ์ œ

 node ํ™˜๊ฒฝ setting ์‚ญ์ œ

* [FE] ci: Jest, RTL ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ ๊ตฌ์ถ• (#84)

* fix: stylelint๋ฅผ ํ†ตํ•œ css ์†์„ฑ ์ •๋ ฌ ๊ธฐ๋Šฅ ์˜ค๋ฅ˜ ์ˆ˜์ •

- stylelint ๋ฒ„์ „16๊ณผ ์ถฉ๋Œ๋˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ ์‚ญ์ œ : stylelint-config-prettier, stylelint-prettier
- css ์ •๋ ฌ์— ํ•„์š”ํ•˜์ง€ ์•Š์€ ํ”Œ๋Ÿฌ๊ทธ์ธ ์‚ญ์ œ : stylelint-config-standard, stylelint-config-styled-componented, stylelint-webpack-plugin
- ์ถ”๊ฐ€๋กœ ์„ค์น˜ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ: postcss-syntax, @stylelint/postcss-css-in-js
- stylelint ์ ์šฉ script ์ถ”๊ฐ€
- .stylelintrc.json ์ˆ˜์ • : css ๊ด€๋ จ rule ์„ค์ •

* refactor: stylelint ์ ์šฉ์— ๋”ฐ๋ฅธ css ์†์„ฑ ์ •๋ ฌ

* fix : ์ ˆ๋Œ€ ๊ฒฝ๋กœ ์‚ฌ์šฉ ์‹œ ์˜ค๋ฅ˜ ์ˆ˜์ •

์˜ค๋ฅ˜ : eslintimport/no-unresolved

* chore: eslintrc.cjs ์—์„œ ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ ์‚ญ์ œ

 node ํ™˜๊ฒฝ setting ์‚ญ์ œ

* ci: jest ๋ฐ RTL ์„ค์น˜

* ci: jest ํƒ€์ž… ์„ค์ • ์ถ”๊ฐ€

* ci: CI๋ฅผ ์œ„ํ•œ yml ํŒŒ์ผ ํ…Œ์ŠคํŠธ

* fix: ์ž˜๋ชป ์˜ฌ๋ผ๊ฐ„ ํŒŒ์ผ ์‚ญ์ œ

---------

Co-authored-by: badahertz52 <[email protected]>

* [BE] refactor: ๋ฐœ์ƒํ•˜๋Š” ๋ชจ๋“  ์˜ˆ์™ธ์˜ ํ˜•์‹ ํ†ต์ผ (#69)

* refactor: ์ปค์Šคํ…€ ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋„๋ก ์ˆ˜์ •

* refactor: ๋ชจ๋“  ์˜ˆ์™ธ๋ฅผ ์žก์„ ์ˆ˜ ์žˆ๋„๋ก ์ˆ˜์ •

* refactor: ExceptionHandler๊ฐ€ ๋ฐ˜ํ™˜ํ•˜๋Š” ์˜ˆ์™ธ ์‘๋‹ต ํ˜•์‹ ๋ณ€๊ฒฝ

- ProblemDetail๋กœ ๋ณ€๊ฒฝ

* refactor: ResponseEntityExceptionHandler๋ฅผ ์ƒ์†ํ•˜์ง€ ์•Š๋„๋ก ๋ณ€๊ฒฝ

* feat: ResponseEntityExceptionHandler์—์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ์˜ˆ์™ธ๋ฅผ ์ง์ ‘ ํ•ธ๋“ค๋ง

* feat: CORS ์„ค์ • ์ถ”๊ฐ€ (#88)

* fix: ci PR ๋ธŒ๋žœ์น˜ ์„ค์ • (#92)

* refactor: ์˜ˆ์™ธ ํ•ธ๋“ค๋Ÿฌ ์ธ์ž ๋ณ€๊ฒฝ (#87)

* [BE] ๋„๋ฉ”์ธ ์—ฐ๊ด€๊ด€๊ณ„ ์žฌ์„ค์ • (#97)

* feat: ๊นƒํ—ˆ๋ธŒ ์•„์ด๋”” ์›์‹œ๊ฐ’ ํฌ์žฅ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* feat: ํšŒ์› `GithubId` ์‚ฌ์šฉ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* refactor: ํ‚ค์›Œ๋“œ ๋‚ด ์ปฌ๋Ÿผ ์ˆ˜์ • (content)

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* refactor: ์ผ๊ธ‰ ์ปฌ๋ ‰์…˜ ์ด๋ฆ„ ๋ณ€๊ฒฝ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* feat: ์งˆ๋ฌธ ์—”ํ‹ฐํ‹ฐ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* refactor: ๋‹ต๋ณ€ ๊ตฌ์กฐ ๋ณ€๊ฒฝ, ๊ธธ์ด ๊ฒ€์ฆ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* refactor: ํ‚ค์›Œ๋“œ ์—ฐ๊ด€๊ด€๊ณ„ ์—†์ด ์ฐธ์กฐํ•˜๋„๋ก ์„ค์ •

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* test: ๋‹ต๋ณ€ ๊ธธ์ด ํ…Œ์ŠคํŠธ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* feat: ๋ฆฌ๋ทฐ ์ƒ์„ฑ ์‹œ ํ‚ค์›Œ๋“œ ๋ฐ›์•„์„œ ์ƒ์„ฑ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* test: ๋ฆฌ๋ทฐ์–ด์™€ ๋ฆฌ๋ทฐ์ด ๊ฐ™์€ ๊ฒฝ์šฐ์˜ ์˜ˆ์™ธ ํ…Œ์ŠคํŠธ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* chore: ๋ฆฌ๋ทฐ-ํ‚ค์›Œ๋“œ ๋งคํ•‘ ํ…Œ์ด๋ธ” ์‚ญ์ œ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* fix: Fixture ์‚ฌ์šฉํ•ด ์ปดํŒŒ์ผ ์—๋Ÿฌ ํ•ด๊ฒฐ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* refactor: ์ผ๋Œ€๋‹ค ํŽธ์˜ ๋ฉ”์†Œ๋“œ ์ž‘์„ฑ,

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* feat: ๊นƒํ—ˆ๋ธŒ ์•„์ด๋”” ๊ทธ๋ฃน, ๋ฆฌ๋ทฐ์–ด ์—ฐ๊ด€๊ด€๊ณ„

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* feat: ๋ฆฌ๋ทฐ๊ทธ๋ฃน - ๋ฆฌ๋ทฐ ์ผ๋Œ€๋‹ค ๋‹จ๋ฐฉํ–ฅ ์—ฐ๊ด€๊ด€๊ณ„ ์ ์šฉ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* feat: ๋ฆฌ๋ทฐ๊ทธ๋ฃน - ๋ฆฌ๋ทฐ ์ผ๋Œ€๋‹ค ์–‘๋ฐฉํ–ฅ ์—ฐ๊ด€๊ด€๊ณ„ ์ ์šฉ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* feat: ๋ฆฌ๋ทฐ์–ด ๊ทธ๋ฃน ๊นƒํ—ˆ๋ธŒ ์•„์ด๋”” ๊ฒ€์ฆ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* feat: ์…€ํ”„๋ฆฌ๋ทฐ ๊ฒ€์ฆ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* chore: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํŒŒ์ผ ์‚ญ์ œ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* feat: ๋ฆฌ๋ทฐ ์ถ”๊ฐ€ ๊ฒ€์ฆ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* fix: ์ˆœํ™˜ ์ฐธ์กฐ NPE ํ•ด๊ฒฐ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* chore: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” import ์ œ๊ฑฐ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* chore: Github ID ํŒจํ‚ค์ง€ ์ด๋™

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* feat: ๋ฆฌ๋ทฐ - ๋ฆฌ๋ทฐ ๋‹ต๋ณ€ ์—ฐ๊ด€๊ด€๊ณ„ ์„ค์ •

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* chore: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ฝ”๋“œ ์ œ๊ฑฐ

* refactor: ๋‚ด๊ฐ€ ๋ฐ›์€ ๋ฆฌ๋ทฐ ์ƒ์„ธ ๋ณด๊ธฐ ๊ตฌํ˜„

---------

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* [FE] feat: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํŽ˜์ด์ง€ ๊ธฐ๋Šฅ ๊ตฌํ˜„ (#89)

* fix: stylelint๋ฅผ ํ†ตํ•œ css ์†์„ฑ ์ •๋ ฌ ๊ธฐ๋Šฅ ์˜ค๋ฅ˜ ์ˆ˜์ •

- stylelint ๋ฒ„์ „16๊ณผ ์ถฉ๋Œ๋˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ ์‚ญ์ œ : stylelint-config-prettier, stylelint-prettier
- css ์ •๋ ฌ์— ํ•„์š”ํ•˜์ง€ ์•Š์€ ํ”Œ๋Ÿฌ๊ทธ์ธ ์‚ญ์ œ : stylelint-config-standard, stylelint-config-styled-componented, stylelint-webpack-plugin
- ์ถ”๊ฐ€๋กœ ์„ค์น˜ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ: postcss-syntax, @stylelint/postcss-css-in-js
- stylelint ์ ์šฉ script ์ถ”๊ฐ€
- .stylelintrc.json ์ˆ˜์ • : css ๊ด€๋ จ rule ์„ค์ •

* refactor: stylelint ์ ์šฉ์— ๋”ฐ๋ฅธ css ์†์„ฑ ์ •๋ ฌ

* chore: ํ˜„์žฌ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ์ €์žฅ ๋ฒ„ํŠผ ์ˆจ๊น€ ์ฒ˜๋ฆฌ

* design: ๊ธฐ๋ณธ ํฐํŠธ ์‚ฌ์ด์ฆˆ ๋ณ€๊ฒฝ

- 15px -> 16px๋กœ ์ˆ˜์ •

* fix : ์ ˆ๋Œ€ ๊ฒฝ๋กœ ์‚ฌ์šฉ ์‹œ ์˜ค๋ฅ˜ ์ˆ˜์ •

์˜ค๋ฅ˜ : eslintimport/no-unresolved

* design: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํŽ˜์ด์ง€์˜ ์ˆ˜์ •๋œ ๋””์ž์ธ ์ ์šฉ

- ์ƒ‰์ƒ ์ฝ”๋“œ ์ˆ˜์ •
- ๋ฒ„ํŠผ ํ˜ธ๋ฒ„ ์‹œ ์Šคํƒ€์ผ๋ง ์ˆ˜์ •
- ๋ฆฌ๋ทฐ ๋งˆ๊ฐ์ผ ๋‚ ์งœ ํ˜•์‹ ๋ณ€๊ฒฝ

* design: ๋ฆฌ๋ทฐ ์งˆ๋ฌธ์— ์•ˆ๋‚ด ๋ฌธ๊ตฌ ๋ฐ placeholder ์ถ”๊ฐ€

- ๊ฐ ์งˆ๋ฌธ์— ' (20์ž ์ด์ƒ)' ๋ฌธ๊ตฌ ํ•˜๋“œ์ฝ”๋”ฉ
- ์ตœ๋Œ€ 1000์ž ์ž…๋ ฅ ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๋ฌธ๊ตฌ๋ฅผ textarea์˜ placeholder๋กœ ์ถ”๊ฐ€

* chore: eslintrc.cjs ์—์„œ ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ ์‚ญ์ œ

 node ํ™˜๊ฒฝ setting ์‚ญ์ œ

* chore: api๋ช… ๋ฐ endpoint๋ช… ์ˆ˜์ •

* chore: ๋ฆฌ๋ทฐ ์งˆ๋ฌธ ๋ชฉ๋ก์„ ์„œ๋ฒ„์—์„œ ๋ฐ›์•„์˜ค๊ธฐ ์œ„ํ•ด ์ƒ์ˆ˜ ์ œ๊ฑฐ

* chore: api ๋ฌธ์„œ ํ˜•์‹์— ๋งž๊ฒŒ ๋ฐ์ดํ„ฐ ํƒ€์ž… ์ˆ˜์ •

* fix: ํ‚ค์›Œ๋“œ ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„ ๋•Œ ํผ์ด ์ œ์ถœ๋˜๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ

* feat: ์ž‘์„ฑํ•œ ๋ฆฌ๋ทฐ ๋‚ด์šฉ์„ ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์˜ ์ƒํƒœ์™€ ๋™๊ธฐํ™”ํ•˜๋„๋ก ์„ค์ •

* design: textarea์˜ ํฌ๊ธฐ๋ฅผ ๊ณ ์ •์‹œํ‚ค๊ณ , ๋„˜์–ด๊ฐˆ ๊ฒฝ์šฐ ์Šคํฌ๋กค ๋˜๋„๋ก ๋ณ€๊ฒฝ

* design: ๊ณตํ†ต ๋ฒ„ํŠผ ์ปดํฌ๋„ŒํŠธ์— ์กฐ๊ฑด๋ถ€ ์Šคํƒ€์ผ๋ง ๊ตฌํ˜„

* design: disabled ๊ด€๋ จ ์ƒ‰์ƒ ๋ณ€์ˆ˜ ์ถ”๊ฐ€

* feat: ๋ชจ๋“  ํผ์„ ์ž‘์„ฑํ–ˆ์„ ๋•Œ ์ œ์ถœ ๋ฒ„ํŠผ์ด ํ™œ์„ฑํ™”๋˜๋„๋ก ๊ตฌํ˜„, ํ‚ค์›Œ๋“œ ์„ ํƒ ๋กœ์ง ๊ตฌํ˜„

* feat: ์ œ์ถœ ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ confirm ๋ฐœ์ƒ, ํ•œ ๋ฒˆ ๋” ํ™•์ธ ์‹œ ์ œ์ถœ๋˜๋„๋ก ๊ตฌํ˜„

* feat: ํ‚ค์›Œ๋“œ ๋ฒ„ํŠผ์„ 5๊ฐœ ์ดˆ๊ณผํ•ด์„œ ์„ ํƒํ•  ์ˆ˜ ์—†๋„๋ก ๊ตฌํ˜„

* feat: textarea์— 1000์ž๋ฅผ ์ดˆ๊ณผํ•ด์„œ ์ž…๋ ฅํ•  ์ˆ˜ ์—†๋„๋ก ๊ตฌํ˜„ ๋ฐ ํ˜„์žฌ ๊ธ€์ž์ˆ˜ ํ‘œ์‹œ

* fix: ์ด๋ฏธ ์„ ํƒ๋œ ํ‚ค์›Œ๋“œ๋ฅผ ํ•ด์ œํ•˜๋ ค ํ•ด๋„ ๊ฐœ์ˆ˜ ์ œํ•œ๋˜๋Š” ์˜ค๋ฅ˜ ์ˆ˜์ •

* refactor: ํผ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ์กฐ๊ฑด๋“ค์„ ๋ณ€์ˆ˜๋กœ ๋ถ„๋ฆฌ

* design: ํ‚ค์›Œ๋“œ ๋ฒ„ํŠผ๋“ค์˜ ํฌ๊ธฐ๋ฅผ fit-content๋กœ ๋ณ€๊ฒฝ ๋ฐ ๊ฐ€๋กœ๋กœ ๋‚˜์—ดํ•˜๋„๋ก ์ˆ˜์ •

* chore: api ์—ฐ๊ฒฐ ์ด์ „, ์ž„์‹œ๋กœ ํผ ์ •๋ณด๋ฅผ ์ฝ˜์†”์— ์ถœ๋ ฅํ•˜๋„๋ก ์„ค์ •

* chore: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ์™„๋ฃŒ ํŽ˜์ด์ง€ ๋ผ์šฐํ„ฐ ์ถ”๊ฐ€

* feat: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ์™„๋ฃŒ ํŽ˜์ด์ง€ ๋ฐ ์ž‘์„ฑ ์™„๋ฃŒ ์‹œ ํŽ˜์ด์ง€ ์ด๋™ ๊ธฐ๋Šฅ ๊ตฌํ˜„

* refactor: ๋ฆฌ๋ทฐ ์•„์ดํ…œ ์ปดํฌ๋„ŒํŠธ ๋งค์ง๋„˜๋ฒ„ ์ƒ์ˆ˜ํ™”

* chore: ์‹œ๊ณ„ ์•„์ด์ฝ˜ ์Šคํƒ€์ผ ์ปดํฌ๋„ŒํŠธํ™”

* refactor: ๋ฆฌ๋ทฐ ๊ด€๋ จ ๋ฉ”์‹œ์ง€ ์ƒ์ˆ˜ ๋ถ„๋ฆฌ

* design: ๋ฆฌ๋ทฐ ์ž‘์„ฑ๋ž€ placeholder ๋ฐ ๋ณธ๋ฌธ font weight ๋ณ€๊ฒฝ

* refactor: ๋ฆฌ๋ทฐ ๋ฌธํ•ญ ๋ฒˆํ˜ธ ๋™์ ์œผ๋กœ ๋ถ€์—ฌํ•˜๋„๋ก ๋ณ€๊ฒฝ ๋ฐ ์ƒ์ˆ˜ํ™” ์ ์šฉ

* refactor: on-, handle- prefix ๊ด€๋ จ ์ปจ๋ฒค์…˜ ์ ์šฉ ๋ฐ ํ‚ค์›Œ๋“œ ๋ฒ„ํŠผ ์ธํ„ฐํŽ˜์ด์Šค ํ™•์žฅ

* chore: ๋ฆฌ๋ทฐ ๋‹ต๋ณ€์˜ ๊ธธ์ด๊ฐ€ ์œ ํšจํ•œ์ง€ ์ฒดํฌํ•˜๋Š” ๋ณ€์ˆ˜์˜ ์ด๋ฆ„์„ ์˜๋ฏธ๋ฅผ ์ž˜ ๋“œ๋Ÿฌ๋‚ด๋„๋ก ์ˆ˜์ •

* refactor: ๊ณตํ†ต ๋ฒ„ํŠผ์˜ ํƒ€์ž…๋ณ„ ์Šคํƒ€์ผ์„ ํ•จ์ˆ˜๋กœ ๋ถ„๋ฆฌ

* style: api ํ˜ธ์ถœ ํ•จ์ˆ˜๋ช… ์ปจ๋ฒค์…˜์— ๋งž๊ฒŒ ์ˆ˜์ •

* chore: ๋ถˆํ•„์š”ํ•œ PropsWithChildren import ์ œ๊ฑฐ

---------

Co-authored-by: badahertz52 <[email protected]>

* [FE] MSW๋ฅผ mock server๋กœ ์…‹ํŒ… (#95)

* fix: stylelint๋ฅผ ํ†ตํ•œ css ์†์„ฑ ์ •๋ ฌ ๊ธฐ๋Šฅ ์˜ค๋ฅ˜ ์ˆ˜์ •

- stylelint ๋ฒ„์ „16๊ณผ ์ถฉ๋Œ๋˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ ์‚ญ์ œ : stylelint-config-prettier, stylelint-prettier
- css ์ •๋ ฌ์— ํ•„์š”ํ•˜์ง€ ์•Š์€ ํ”Œ๋Ÿฌ๊ทธ์ธ ์‚ญ์ œ : stylelint-config-standard, stylelint-config-styled-componented, stylelint-webpack-plugin
- ์ถ”๊ฐ€๋กœ ์„ค์น˜ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ: postcss-syntax, @stylelint/postcss-css-in-js
- stylelint ์ ์šฉ script ์ถ”๊ฐ€
- .stylelintrc.json ์ˆ˜์ • : css ๊ด€๋ จ rule ์„ค์ •

* refactor: stylelint ์ ์šฉ์— ๋”ฐ๋ฅธ css ์†์„ฑ ์ •๋ ฌ

* fix : ์ ˆ๋Œ€ ๊ฒฝ๋กœ ์‚ฌ์šฉ ์‹œ ์˜ค๋ฅ˜ ์ˆ˜์ •

์˜ค๋ฅ˜ : eslintimport/no-unresolved

* chore: eslintrc.cjs ์—์„œ ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ ์‚ญ์ œ

 node ํ™˜๊ฒฝ setting ์‚ญ์ œ

* style: eslint ์ ์šฉ์— ๋”ฐ๋ฅธ ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€ import ์ˆœ์„œ ์ •๋ฆฌ

* refactor: formatDate๋ฅผ utils/date ํŒŒ์ผ๋กœ ์ด๋™

* design: theme์— colors,, fontSize ๋ณ€๊ฒฝ ๋ฐ borderRadius ์ถ”๊ฐ€

* feat: MultilineTextViewer ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ

- ๊ฐœํ–‰์ด ํฌํ•จ๋œ string์— ๊ฐœํ–‰์„ ์ ์šฉํ•ด์„œ ๋ณด์—ฌ์ฃผ๋Š” ์ปดํฌ๋„ŒํŠธ

* feat: ๊นƒํ—ˆ๋ธŒ ์ €์žฅ์†Œ ์ด๋ฏธ์ง€ ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ

* feat: ๋ฆฌ๋ทฐ์™€ ๊ด€๋ จ๋œ ๋‚ ์งœ UI ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ

* featr: LockButton ์‚ญ์ œ LockToggle ์ถ”๊ฐ€

* refactor: ํ”ผ๊ทธ๋งˆ ๋””์ž์ธ ๋ณ€๊ฒฝ์— ๋”ฐ๋ฅธ ReviewDescription ๋ณ€๊ฒฝ

* feat: ReviewComment ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ

* refactor: ReviewViewSection -> ReviewSection ์œผ๋กœ ๋ณ€๊ฒฝ ๋ฐ ๋ฆฌํŒฉํ† ๋ง

- ๋ถˆํ•„์š”ํ•œ  ์ปดํฌ๋„ŒํŠธ ์‚ญ์ œ : RevieAnswer , ReviewQuestion

* refactor: DetailedReviewPage ๋ฆฌํŒฉํ† ๋ง

- ๋ชฉ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ
-  ์ถ”๊ฐ€ ๋ฐ ๋ณ€๊ฒฝ๋œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•ด ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€ ์ปดํฌ๋„ŒํŠธ(DetailedReviewPage) ๋ฆฌํŒฉํ† ๋ง
- DetailedReviewPage ํด๋”์˜ styles.ts ์‚ญ์ œ

* refactor: review์— ๋Œ€ํ•œ ํƒ€์ž… ๋ณ€๊ฒฝ

* design : ReviewDate์˜ ํด๋ก  ์Šคํƒ€์ผ ์ ์šฉ

* feat: KeywordSection ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ

- ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€ ํ‚ค์›Œ๋“œ ๋ถ€๋ถ„ ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ

* feat: ReviewSectionHeader ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ ๋ฐ ์ ์šฉ

- ๋ฆฌ๋ทฐ ์ƒ์„ธ๋ณด๊ธฐ์—์„œ ๋ฐ˜๋ณต๋˜๋Š” ์งˆ๋ฌธ,ํ‚ค์›Œ๋“œ ํ—ค๋”๋ถ€๋ถ„์„ ์ปดํฌ๋„ŒํŠธ๋กœ ๋ถ„๋ฆฌ

* design : ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€์— width ๋ณ€๊ฒฝ

* refactor: DetailedReview์˜ ๋ชฉ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ๋ฐ ๋ฆฌํŒฉํ† ๋ง

- ํƒ€์ž… ๋ณ€๊ฒฝ์— ๋”ฐ๋ฅธ ๋ชฉ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ
- KeywordSection ์ ์šฉ

* design : formWidth๋ฅผ theme์— ์ถ”๊ฐ€ ๋ฐ ๋ฆฌ๋ทฐ ์ž‘์„ฑ/๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€์— ์ ์šฉ

* fix: Layout์—์„œ ๊ฐ€๋กœ ์Šคํฌ๋กค ์ƒ๊ธฐ๋Š” ์˜ค๋ฅ˜ ์ˆ˜์ •

- 100vw๋Š” ์Šคํฌ๋กค์„ ํฌํ•จํ•œ ๋ทฐํฌํŠธ ๋„ˆ๋น„๋ผ์„œ 100%์œผ๋กœ ์ˆ˜์ •

* feat: ๋ฆฌ๋ทฐ ์ƒํŽ˜์ด์ง€ router์— ๋ผ์šฐํ„ฐ ํŒŒ๋ผ๋ฏธํ„ฐ ์ ์šฉ ๋ฐ ๊ด€๋ จ ์„ค์ • ๋ณ€๊ฒฝ

- ๋ฐ๋ชจ๋ฐ์ด๋ฅผ ์œ„ํ•ด ํ˜„์žฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์žˆ๋Š” ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€ id๋ฅผ sidebar์˜ ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€ ๋ฉ”๋‰ด link์— ์ ์šฉ
- ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€(DetailedReviewPage)์˜ api ํ•ธ๋“ค๋Ÿฌ ์ˆ˜์ •

* docs: ๋ณ€์ˆ˜๋ช… ๋ณ€๊ฒฝ (isLock -> isPublic)

* refactor: ๊นƒํ—™ ์ €์žฅ์†Œ ๋กœ๊ณ  ์ฃผ์†Œ ๋ณ€์ˆ˜๋ช… ๋ณ€๊ฒฝ

- projectImgSrc -> thumbnailUrl

* ci: msw ๊ด€๋ จ ํŒจํ‚ค์ง€ ์„ค์น˜

* ci: msw ๊ด€๋ จ ์„ค์ •ํŒŒ์ผ ์ถ”๊ฐ€

- ๋ธŒ๋ผ์šฐ์ € ํ™˜๊ฒฝ, node ํ™˜๊ฒฝ์—์„œ msw๋กœ ๋ชฉ์„œ๋ฒ„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ด€๋ จ ํŒŒ์ผ ์ถ”๊ฐ€

* feat: mock ํ•ธ๋“ค๋Ÿฌ ์ถ”๊ฐ€ ๋ฐ ์ƒ์„ธ ๋ฆฌ๋ทฐ ํŽ˜์ด์ง€ ๋ชฉ ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€

* feat:  root์—์„œ ๋ชฉ์„œ๋ฒ„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋กํ•จ

* refactor: endpoint ์ˆ˜์ •

- env ์—์„œ ์„œ๋ฒ„ ์ฃผ์†Œ ๋์— ์Šฌ๋ž˜์‹œ ๋„ฃ๋Š” ๊ฒƒ์œผ๋กœ ํ†ต์ผ

* feat: ์ƒ์„ธ ๋ฆฌ๋ทฐ ํŽ˜์ด์ง€(detailedReviewPage)์— ๋ชฉ์„œ๋ฒ„ ์—ฐ๊ฒฐ ๋ฐ ๊ด€๋ จ ์ฝ”๋“œ ์ˆ˜์ •

- ์ƒํƒœ๋ช… ๋ณ€๊ฒฝ: detailReview -> detailedReview
- detailedReview ํƒ€์ž…์— null ์ถ”๊ฐ€ ๋ฐ ๊ทธ์— ๋”ฐ๋ฅธ ์˜ค๋ฅ˜ ํ•ธ๋“ค๋ง ์ถ”๊ฐ€
- deadline์— string ํƒ€์ž…์œผ๋กœ response๋กœ ์ „๋‹ฌ๋˜์–ด์„œ new Date๋กœ ๊ฐ์‹ธ์„œ props๋กœ ์ „๋‹ฌ

* docs: indexhtml์˜ title ๋ณ€๊ฒฝ

* style: apis/review.ts ์˜ import ๊ด€๋ จ eslint rule ์ ์šฉ์— ๋”ฐ๋ฅธ ์ˆ˜์ •

* fix: ts์—์„œ process ์ฝ์ง€ ๋ชปํ•˜๋Š” ์˜ค๋ฅ˜ ์ˆ˜์ •

* fix: webpack dev server script ๋ณต์›

* [FE] ์ƒ์„ธ ๋ฆฌ๋ทฐ ํŽ˜์ด์ง€ : url router ์—ฐ๋™, ๋ณ€๊ฒฝ๋œ ๋””์ž์ธ ๋ฐ˜์˜ ๋ฐ ์„œ๋ฒ„์—์„œ api๋ฅผ ์—ฐ๋™ (#91)

* fix: stylelint๋ฅผ ํ†ตํ•œ css ์†์„ฑ ์ •๋ ฌ ๊ธฐ๋Šฅ ์˜ค๋ฅ˜ ์ˆ˜์ •

- stylelint ๋ฒ„์ „16๊ณผ ์ถฉ๋Œ๋˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ ์‚ญ์ œ : stylelint-config-prettier, stylelint-prettier
- css ์ •๋ ฌ์— ํ•„์š”ํ•˜์ง€ ์•Š์€ ํ”Œ๋Ÿฌ๊ทธ์ธ ์‚ญ์ œ : stylelint-config-standard, stylelint-config-styled-componented, stylelint-webpack-plugin
- ์ถ”๊ฐ€๋กœ ์„ค์น˜ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ: postcss-syntax, @stylelint/postcss-css-in-js
- stylelint ์ ์šฉ script ์ถ”๊ฐ€
- .stylelintrc.json ์ˆ˜์ • : css ๊ด€๋ จ rule ์„ค์ •

* refactor: stylelint ์ ์šฉ์— ๋”ฐ๋ฅธ css ์†์„ฑ ์ •๋ ฌ

* fix : ์ ˆ๋Œ€ ๊ฒฝ๋กœ ์‚ฌ์šฉ ์‹œ ์˜ค๋ฅ˜ ์ˆ˜์ •

์˜ค๋ฅ˜ : eslintimport/no-unresolved

* chore: eslintrc.cjs ์—์„œ ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ ์‚ญ์ œ

 node ํ™˜๊ฒฝ setting ์‚ญ์ œ

* style: eslint ์ ์šฉ์— ๋”ฐ๋ฅธ ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€ import ์ˆœ์„œ ์ •๋ฆฌ

* refactor: formatDate๋ฅผ utils/date ํŒŒ์ผ๋กœ ์ด๋™

* design: theme์— colors,, fontSize ๋ณ€๊ฒฝ ๋ฐ borderRadius ์ถ”๊ฐ€

* feat: MultilineTextViewer ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ

- ๊ฐœํ–‰์ด ํฌํ•จ๋œ string์— ๊ฐœํ–‰์„ ์ ์šฉํ•ด์„œ ๋ณด์—ฌ์ฃผ๋Š” ์ปดํฌ๋„ŒํŠธ

* feat: ๊นƒํ—ˆ๋ธŒ ์ €์žฅ์†Œ ์ด๋ฏธ์ง€ ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ

* feat: ๋ฆฌ๋ทฐ์™€ ๊ด€๋ จ๋œ ๋‚ ์งœ UI ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ

* featr: LockButton ์‚ญ์ œ LockToggle ์ถ”๊ฐ€

* refactor: ํ”ผ๊ทธ๋งˆ ๋””์ž์ธ ๋ณ€๊ฒฝ์— ๋”ฐ๋ฅธ ReviewDescription ๋ณ€๊ฒฝ

* feat: ReviewComment ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ

* refactor: ReviewViewSection -> ReviewSection ์œผ๋กœ ๋ณ€๊ฒฝ ๋ฐ ๋ฆฌํŒฉํ† ๋ง

- ๋ถˆํ•„์š”ํ•œ  ์ปดํฌ๋„ŒํŠธ ์‚ญ์ œ : RevieAnswer , ReviewQuestion

* refactor: DetailedReviewPage ๋ฆฌํŒฉํ† ๋ง

- ๋ชฉ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ
-  ์ถ”๊ฐ€ ๋ฐ ๋ณ€๊ฒฝ๋œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•ด ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€ ์ปดํฌ๋„ŒํŠธ(DetailedReviewPage) ๋ฆฌํŒฉํ† ๋ง
- DetailedReviewPage ํด๋”์˜ styles.ts ์‚ญ์ œ

* refactor: review์— ๋Œ€ํ•œ ํƒ€์ž… ๋ณ€๊ฒฝ

* design : ReviewDate์˜ ํด๋ก  ์Šคํƒ€์ผ ์ ์šฉ

* feat: KeywordSection ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ

- ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€ ํ‚ค์›Œ๋“œ ๋ถ€๋ถ„ ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ

* feat: ReviewSectionHeader ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ ๋ฐ ์ ์šฉ

- ๋ฆฌ๋ทฐ ์ƒ์„ธ๋ณด๊ธฐ์—์„œ ๋ฐ˜๋ณต๋˜๋Š” ์งˆ๋ฌธ,ํ‚ค์›Œ๋“œ ํ—ค๋”๋ถ€๋ถ„์„ ์ปดํฌ๋„ŒํŠธ๋กœ ๋ถ„๋ฆฌ

* design : ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€์— width ๋ณ€๊ฒฝ

* refactor: DetailedReview์˜ ๋ชฉ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ๋ฐ ๋ฆฌํŒฉํ† ๋ง

- ํƒ€์ž… ๋ณ€๊ฒฝ์— ๋”ฐ๋ฅธ ๋ชฉ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ
- KeywordSection ์ ์šฉ

* design : formWidth๋ฅผ theme์— ์ถ”๊ฐ€ ๋ฐ ๋ฆฌ๋ทฐ ์ž‘์„ฑ/๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€์— ์ ์šฉ

* fix: Layout์—์„œ ๊ฐ€๋กœ ์Šคํฌ๋กค ์ƒ๊ธฐ๋Š” ์˜ค๋ฅ˜ ์ˆ˜์ •

- 100vw๋Š” ์Šคํฌ๋กค์„ ํฌํ•จํ•œ ๋ทฐํฌํŠธ ๋„ˆ๋น„๋ผ์„œ 100%์œผ๋กœ ์ˆ˜์ •

* feat: ๋ฆฌ๋ทฐ ์ƒํŽ˜์ด์ง€ router์— ๋ผ์šฐํ„ฐ ํŒŒ๋ผ๋ฏธํ„ฐ ์ ์šฉ ๋ฐ ๊ด€๋ จ ์„ค์ • ๋ณ€๊ฒฝ

- ๋ฐ๋ชจ๋ฐ์ด๋ฅผ ์œ„ํ•ด ํ˜„์žฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์žˆ๋Š” ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€ id๋ฅผ sidebar์˜ ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€ ๋ฉ”๋‰ด link์— ์ ์šฉ
- ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€(DetailedReviewPage)์˜ api ํ•ธ๋“ค๋Ÿฌ ์ˆ˜์ •

* docs: ๋ณ€์ˆ˜๋ช… ๋ณ€๊ฒฝ (isLock -> isPublic)

* refactor: ๊นƒํ—™ ์ €์žฅ์†Œ ๋กœ๊ณ  ์ฃผ์†Œ ๋ณ€์ˆ˜๋ช… ๋ณ€๊ฒฝ

- projectImgSrc -> thumbnailUrl

* refactor: ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€ api ๋ณ€๊ฒฝ์— ๋”ฐ๋ฅธ ์ˆ˜์ •

- ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€ keyword ํƒ€์ž… ๋ณ€๊ฒฝ
- api endpoint ๋ณ€๊ฒฝ , router ๋ณ€๊ฒฝ, sidebar ์ƒ์„ธ๋ณด๊ธฐ ๊ฒฝ๋กœ ๋ณ€๊ฒฝ
- useState์— ๋นˆ ๊ฐ’์— ๋Œ€ํ•œ ํƒ€์ž… ์ถ”๋ก  ์‚ฌ์šฉ

* [BE] test: ๋„๋ฉ”์ธ ์—ฐ๊ด€๊ด€๊ณ„ ์žฌ์„ค์ • ํ›„ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ (#101)

* test: ๋ฆฌ๋ทฐ์–ด ๊ทธ๋ฃน ํ…Œ์ŠคํŠธ ์ž‘์„ฑ

* refactor: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํ…Œ์ŠคํŠธ๋ฅผ `ReviewTest`๋กœ ์ด๋™

* test: ๋ฆฌ๋ทฐ์–ด ์ค‘๋ณต ์ถ”๊ฐ€ ํ…Œ์ŠคํŠธ

* refactor: Test Fixture ์‚ฌ์šฉํ•˜๋„๋ก ์ˆ˜์ •

* refactor: ์˜ˆ์™ธ ํด๋ž˜์Šค๋ช… ํ†ต์ผ

* style: ํ…Œ์ŠคํŠธ ๊ฐœํ–‰

* refactor: ํ…Œ์ŠคํŠธ๋ช… ๋ช…ํ™•ํ•˜๊ฒŒ ์ˆ˜์ •

* refactor: ํšŒ์› ๋„๋ฉ”์ธ์—์„œ์˜ ๋น„๊ต๋ฅผ GithubId๋กœ ์ง„ํ–‰ํ•˜๋„๋ก ์ˆ˜์ •

* refactor: createdAt ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ , deadline์œผ๋กœ ์ˆ˜์ •

* refactor: ํ•„๋“œ๋ช… reviewerGithubIds๋กœ ํ†ต์ผ

* test: ๋ฆฌ๋ทฐ์–ด ์ค‘๋ณต ์ƒ์„ฑ ๊ฒ€์ฆ

* refactor: reviewer/reviewee ํ†ต์ผ

* refactor: ๋ฆฌ๋ทฐ์–ด-๋ฆฌ๋ทฐ์ด github id๋ฅผ ๋ช…์‹œ

* refactor: ํ…Œ์ŠคํŠธ์— ํ•˜๋‚˜์˜ ๊ฒ€์ฆ๋งŒ ์ง„ํ–‰๋˜๋„๋ก ์ˆ˜์ •

* [FE] feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํŽ˜์ด์ง€ ๊ธฐ๋Šฅ ๊ตฌํ˜„ (#90)

* fix: stylelint๋ฅผ ํ†ตํ•œ css ์†์„ฑ ์ •๋ ฌ ๊ธฐ๋Šฅ ์˜ค๋ฅ˜ ์ˆ˜์ •

- stylelint ๋ฒ„์ „16๊ณผ ์ถฉ๋Œ๋˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ ์‚ญ์ œ : stylelint-config-prettier, stylelint-prettier
- css ์ •๋ ฌ์— ํ•„์š”ํ•˜์ง€ ์•Š์€ ํ”Œ๋Ÿฌ๊ทธ์ธ ์‚ญ์ œ : stylelint-config-standard, stylelint-config-styled-componented, stylelint-webpack-plugin
- ์ถ”๊ฐ€๋กœ ์„ค์น˜ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ: postcss-syntax, @stylelint/postcss-css-in-js
- stylelint ์ ์šฉ script ์ถ”๊ฐ€
- .stylelintrc.json ์ˆ˜์ • : css ๊ด€๋ จ rule ์„ค์ •

* refactor: stylelint ์ ์šฉ์— ๋”ฐ๋ฅธ css ์†์„ฑ ์ •๋ ฌ

* fix : ์ ˆ๋Œ€ ๊ฒฝ๋กœ ์‚ฌ์šฉ ์‹œ ์˜ค๋ฅ˜ ์ˆ˜์ •

์˜ค๋ฅ˜ : eslintimport/no-unresolved

* chore: eslintrc.cjs ์—์„œ ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ ์‚ญ์ œ

 node ํ™˜๊ฒฝ setting ์‚ญ์ œ

* feat: DropDown ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„

- ์‚ฌ์šฉ์ž ์„ ํƒ์„ ์œ„ํ•œ `DropDown` ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ตฌํ˜„
- `onChange` ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ์™€ `options` ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜์—ฌ ์˜ต์…˜์„ ๋™์ ์œผ๋กœ ํ‘œ์‹œ

Co-Authored-By: badahertz52 <[email protected]>
Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: Fe <[email protected]>

* chore: svg ์•„์ด์ฝ˜ ํฌ๊ธฐ ์ˆ˜์ •

Co-Authored-By: badahertz52 <[email protected]>
Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: Fe <[email protected]>

* design: Topbar UI ์ˆ˜์ •

Co-Authored-By: badahertz52 <[email protected]>
Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: Fe <[email protected]>

* design: ๋ฒ„ํŠผ, ๊ฒ€์ƒ‰์ฐฝ UI ์ˆ˜์ • ํ›„ export

Co-Authored-By: badahertz52 <[email protected]>
Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: Fe <[email protected]>

* feat: ReviewPreviewCard ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„

- ๋ฆฌ๋ทฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์นด๋“œ ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„
- ๋ฆฌ๋ทฐ์–ด ๊ทธ๋ฃน ์ด๋ฆ„, ์ƒ์„ฑ์ผ, ๋ฆฌ๋ทฐ ๋‚ด์šฉ ๋ฏธ๋ฆฌ๋ณด๊ธฐ, ํ‚ค์›Œ๋“œ, ๊ณต๊ฐœ ์—ฌ๋ถ€๋ฅผ ํ‘œ์‹œ

Co-Authored-By: badahertz52 <[email protected]>
Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: Fe <[email protected]>

* chore: ReviewPreview ์ธํ„ฐํŽ˜์ด์Šค ์ถ”๊ฐ€

- ๋ฆฌ๋ทฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ์ •์˜ํ•˜๋Š” `ReviewPreview` ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

Co-Authored-By: badahertz52 <[email protected]>
Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: Fe <[email protected]>

* feat: SearchSection ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„

- ๊ฒ€์ƒ‰ ์ž…๋ ฅ์ฐฝ, ๊ฒ€์ƒ‰ ๋ฒ„ํŠผ, ๋“œ๋กญ๋‹ค์šด์„ ํฌํ•จํ•˜์—ฌ ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„

Co-Authored-By: badahertz52 <[email protected]>
Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: Fe <[email protected]>

* feat: ReviewPreviewListPage ๊ตฌํ˜„ ๋ฐ ๋ชจ์˜ ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€

- `ReviewPreviewListPage` ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„
  - `SearchSection`์„ ํฌํ•จํ•˜์—ฌ ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„
  - `ReviewPreviewCard`๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฆฌ๋ทฐ ๋ชฉ๋ก์„ ํ‘œ์‹œ
- ๋ชจ์˜ ๋ฐ์ดํ„ฐ(`mockReviewPreviews`) ์ถ”๊ฐ€

Co-Authored-By: badahertz52 <[email protected]>
Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: Fe <[email protected]>

* chore: import ์ค‘๋ณต ๋ฐ ์ˆœ์„œ ์ •๋ฆฌ, ReviewPreviewListPage ๋ผ์šฐํŠธ ์ถ”๊ฐ€

Co-Authored-By: badahertz52 <[email protected]>
Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: Fe <[email protected]>

* chore: ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์š”์†Œ๋ฅผ ๊ฐ์‹ธ๊ธฐ ๋•Œ๋ฌธ์— Container๋กœ ๋ณ€๊ฒฝ

Co-Authored-By: badahertz52 <[email protected]>
Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: Fe <[email protected]>

* feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ๋ฐ์ดํ„ฐ๋ฅผ ์„œ๋ฒ„์—์„œ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•ด getReviewListApi ํ•จ์ˆ˜ ์ถ”๊ฐ€

Co-Authored-By: badahertz52 <[email protected]>
Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: Fe <[email protected]>

* refactor: ์ƒ์„ธ ๋ฆฌ๋ทฐ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ api ์—”๋“œํฌ์ธํŠธ ์ˆ˜์ •

Co-Authored-By: badahertz52 <[email protected]>
Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: Fe <[email protected]>

* refactor: ์ƒ์„ธ ๋ฆฌ๋ทฐ ํŽ˜์ด์ง€ API ์—ฐ๋™ ๋ถ€๋ถ„ ์ˆ˜์ •

Co-Authored-By: badahertz52 <[email protected]>
Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: Fe <[email protected]>

---------

Co-authored-by: badahertz52 <[email protected]>
Co-authored-by: ImxYJL <[email protected]>
Co-authored-by: Fe <[email protected]>

* [BE] feat: ๋ฆฌ๋ทฐ ์ž‘์„ฑ API ๊ตฌํ˜„ (#102)

* refactor: ๋ฆฌ๋ทฐ ์š”์ฒญ dto ์ˆ˜์ •

* refactor: ๋ฆฌ๋ทฐ ์ฝ˜ํ…์ธ  ์ƒ์„ฑ ์‹œ, ๋ฆฌ๋ทฐ์— ์ž์‹ ์„ ์ถ”๊ฐ€ํ•˜๋„๋ก ๋ณ€๊ฒฝ

* feat: QuestionRepository ์ถ”๊ฐ€

* feat: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ๊ธฐ๋Šฅ ์ถ”๊ฐ€

* test: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

* refactor: ReviewGroup ์ƒ์„ฑ ์‹œ, GithubIdReviewerGroup๋„ ๊ฐ™์ด ์ €์žฅ๋˜๋„๋ก ๋ณ€๊ฒฝ

* refactor: GithubId equals ๋ฐ hashcode ์žฌ์ •์˜

* refactor: review ์ƒ์„ฑ ์‹œ, reviewGroup์ด null์ด ์•„๋‹ˆ๋„๋ก ๋ณ€๊ฒฝ

* refactor: EqualsAndHashCode์— id ๋ช…์‹œ

* refactor: reviewee๋ฅผ reviewerGroup ํ†ตํ•ด์„œ ๋ฐ›์•„์˜ค๋„๋ก ๋ณ€๊ฒฝ

* refactor: ํŒŒ๋ผ๋ฏธํ„ฐ long ํƒ€์ž…์œผ๋กœ ๋ณ€๊ฒฝ

* test: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ณ€์ˆ˜ ์ œ๊ฑฐ

* test: ํŒŒ๋ผ๋ฏธํ„ฐ๋ณ„๋กœ ๊ฐœํ–‰ํ•˜๋„๋ก ๋ณ€๊ฒฝ

* refactor: ReviewerGroupGithubIds์˜ reviewerGithubIds๋ฅผ CascadeType.PERSIST๋กœ ๋ณ€๊ฒฝ

* chore: ๋‹ค๋ฅธ ์ž‘์—…์—์„œ ์ง„ํ–‰๋  ์‚ฌํ•ญ์œผ๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํ…Œ์ŠคํŠธ ์‚ญ์ œ

* [FE] Github Actions๋กœ CI ๊ตฌ์ถ• (#96)

* ci: CI๋ฅผ ์œ„ํ•œ yml ํŒŒ์ผ ์ž‘์„ฑ

* ci: yarn.lock ๊ฒฝ๋กœ ์ถ”๊ฐ€

* ci: working-directory ์ถ”๊ฐ€

* cI: ๋™์ž‘ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด push ๋ธŒ๋žœ์น˜ ๊ฒฝ๋กœ ์กฐ๊ฑด์—์„œ frontend ์ž„์‹œ ์ œ๊ฑฐ

* ci: ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด ํ˜„์žฌ ๋ธŒ๋žœ์น˜๋„ ์กฐ๊ฑด์— ์ถ”๊ฐ€

* ci: package์— test ๋ช…๋ น์–ด ์ถ”๊ฐ€

* ci: yarn.lock ํŒŒ์ผ ์—…๋ฐ์ดํŠธ

* ci: ํ…Œ์ŠคํŠธ ํŒŒ์ผ ํ˜•์‹ ์ˆ˜์ •

* chore: ํ•„์š”์—†๋Š” ํŒŒ์ผ ์‚ญ์ œ

* chore: svg ํŒŒ์ผ์„ ๋Œ€๋ฌธ์ž๋กœ importํ•œ ๊ฒƒ๋“ค ์†Œ๋ฌธ์ž๋กœ ์ˆ˜์ •

* ci: ์›นํŒฉ env ์„ค์ • ์—…๋ฐ์ดํŠธ

* ci: process.env ์‚ฌ์šฉ์„ ์œ„ํ•œ ํƒ€์ž… ์„ค์ •

* ci: env ์›นํŒฉ ์„ค์ • ๊ฒฝ๋กœ๋ฅผ ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋กœ ๋ณ€๊ฒฝ

* ci: env ์›นํŒฉ ์„ค์ • ๊ฒฝ๋กœ ์ˆ˜์ •

* ci: env ์ ˆ๋Œ€๊ฒฝ๋กœ ์ˆ˜์ •

* ci: ์ ˆ๋Œ€๊ฒฝ๋กœ ์ˆ˜์ • 2

* ci: ์ฝ๊ธฐ ๊ถŒํ•œ์„ ๋ช…์‹œ์ ์œผ๋กœ ์ฃผ๊ณ  ํ…Œ์ŠคํŠธ

* ci: dist ํŒŒ์ผ ํ…Œ์ŠคํŠธ

* ci: CI ํ™˜๊ฒฝ์—์„œ๋„ env ํŒŒ์ผ ์ƒ์„ฑ

* ci: ๋ฐฐํฌ ์ •์ƒ ๋™์ž‘ ํ™•์ธ์„ ์œ„ํ•œ github pages ์ž„์‹œ ๋ฐฐํฌ ์„ค์ •

* ci: ์ž„์‹œ ๋ฐฐํฌ ์ฝ”๋“œ ์‚ญ์ œ

* ci: develop ๋ธŒ๋žœ์น˜๋กœ frontend ์ดํ•˜ ๊ฒฝ๋กœ์—์„œ PR์ด ์˜ฌ๋ผ์˜ฌ ๋•Œ CI๊ฐ€ ์‹คํ–‰๋˜๋„๋ก ์ˆ˜์ •

* ci: node ์„ค์น˜ ์—๋Ÿฌ ํ•ด๊ฒฐ

* [BE] feat: ๋ฆฌ๋ทฐ์— ํ•„์š”ํ•œ ์ •๋ณด ์กฐํšŒ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ (#103)

* test: QuestionTestFixture ์ƒ์„ฑ

* feat: ๋ชจ๋“  ๋ฆฌ๋ทฐ ๋ฌธํ•ญ์„ ์กฐํšŒํ•˜๋Š” ๊ธฐ๋Šฅ ๊ตฌํ˜„

* feat: ๋ชจ๋“  ํ‚ค์›Œ๋“œ๋ฅผ ์กฐํšŒํ•˜๋Š” ๊ธฐ๋Šฅ ๊ตฌํ˜„

* test: ReviewerGroupFixture ์ƒ์„ฑ

* feat: ๋ฆฌ๋ทฐ ์ƒ์„ฑ ์‹œ ํ•„์š”ํ•œ ๋ฆฌ๋ทฐ์–ด ๊ทธ๋ฃน ์ •๋ณด๋ฅผ ์กฐํšŒํ•˜๋Š” ๊ธฐ๋Šฅ ๊ตฌํ˜„

* feat: ๋ฆฌ๋ทฐ ์ƒ์„ฑ ์‹œ ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์กฐํšŒํ•˜๋Š” ๊ธฐ๋Šฅ ๊ตฌํ˜„

* refactor: @ServiceTest ์ ์šฉ

* refactor: swagger ์ ์šฉ

* refactor: ํ•„๋“œ๋ช… ๋ณ€๊ฒฝ

* style: ๊ฐœํ–‰ ์ถ”๊ฐ€

* refactor: ๋‚ ์งœ ํ˜•์‹ ๋ณ€๊ฒฝ

* test: import๋ฌธ ์ œ๊ฑฐ

* refactor: ReviewCreationResponse ํŒจํ‚ค์ง€ ๋ณ€๊ฒฝ

* refactor: readOnly ํŠธ๋žœ์žญ์…˜ ์ ์šฉ

* fix: ๋ฆฌ๋ทฐ์–ด ์ค‘๋ณต ๊ฒ€์ฆ ์ž„์‹œ ์ œ๊ฑฐ

---------

Co-authored-by: donghoony <[email protected]>

* [FE] ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํŽ˜์ด์ง€์—์„œ MSW๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋ฒ„ mocking (#111)

* chore: ์ค‘๋ณต๋œ ์ธํ„ฐํŽ˜์ด์Šค ์ œ๊ฑฐ

* feat: MSW ํ•ธ๋“ค๋Ÿฌ ๋ฐ mock data ์ถ”๊ฐ€

* chore: ๋ฆฌ๋ทฐ ์“ฐ๊ธฐ ํŽ˜์ด์ง€ ๋ฐ์ดํ„ฐ endpoint ์ˆ˜์ •

* feat: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํŽ˜์ด์ง€์— msw๋ฅผ ์ ์šฉํ•˜์—ฌ ์„œ๋ฒ„ mocking

* merge

* [FE]  ๊ณตํ†ต ์ปดํฌ๋„ŒํŠธ์ธ ๋ชจ๋‹ฌ์„ ๋งŒ๋“ ๋‹ค. (#110)

* fix: stylelint๋ฅผ ํ†ตํ•œ css ์†์„ฑ ์ •๋ ฌ ๊ธฐ๋Šฅ ์˜ค๋ฅ˜ ์ˆ˜์ •

- stylelint ๋ฒ„์ „16๊ณผ ์ถฉ๋Œ๋˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ ์‚ญ์ œ : stylelint-config-prettier, stylelint-prettier
- css ์ •๋ ฌ์— ํ•„์š”ํ•˜์ง€ ์•Š์€ ํ”Œ๋Ÿฌ๊ทธ์ธ ์‚ญ์ œ : stylelint-config-standard, stylelint-config-styled-componented, stylelint-webpack-plugin
- ์ถ”๊ฐ€๋กœ ์„ค์น˜ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ: postcss-syntax, @stylelint/postcss-css-in-js
- stylelint ์ ์šฉ script ์ถ”๊ฐ€
- .stylelintrc.json ์ˆ˜์ • : css ๊ด€๋ จ rule ์„ค์ •

* refactor: stylelint ์ ์šฉ์— ๋”ฐ๋ฅธ css ์†์„ฑ ์ •๋ ฌ

* fix : ์ ˆ๋Œ€ ๊ฒฝ๋กœ ์‚ฌ์šฉ ์‹œ ์˜ค๋ฅ˜ ์ˆ˜์ •

์˜ค๋ฅ˜ : eslintimport/no-unresolved

* chore: eslintrc.cjs ์—์„œ ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ ์‚ญ์ œ

 node ํ™˜๊ฒฝ setting ์‚ญ์ œ

* style: eslint ์ ์šฉ์— ๋”ฐ๋ฅธ ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€ import ์ˆœ์„œ ์ •๋ฆฌ

* refactor: formatDate๋ฅผ utils/date ํŒŒ์ผ๋กœ ์ด๋™

* design: theme์— colors,, fontSize ๋ณ€๊ฒฝ ๋ฐ borderRadius ์ถ”๊ฐ€

* feat: MultilineTextViewer ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ

- ๊ฐœํ–‰์ด ํฌํ•จ๋œ string์— ๊ฐœํ–‰์„ ์ ์šฉํ•ด์„œ ๋ณด์—ฌ์ฃผ๋Š” ์ปดํฌ๋„ŒํŠธ

* feat: ๊นƒํ—ˆ๋ธŒ ์ €์žฅ์†Œ ์ด๋ฏธ์ง€ ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ

* feat: ๋ฆฌ๋ทฐ์™€ ๊ด€๋ จ๋œ ๋‚ ์งœ UI ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ

* featr: LockButton ์‚ญ์ œ LockToggle ์ถ”๊ฐ€

* refactor: ํ”ผ๊ทธ๋งˆ ๋””์ž์ธ ๋ณ€๊ฒฝ์— ๋”ฐ๋ฅธ ReviewDescription ๋ณ€๊ฒฝ

* feat: ReviewComment ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ

* refactor: ReviewViewSection -> ReviewSection ์œผ๋กœ ๋ณ€๊ฒฝ ๋ฐ ๋ฆฌํŒฉํ† ๋ง

- ๋ถˆํ•„์š”ํ•œ  ์ปดํฌ๋„ŒํŠธ ์‚ญ์ œ : RevieAnswer , ReviewQuestion

* refactor: DetailedReviewPage ๋ฆฌํŒฉํ† ๋ง

- ๋ชฉ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ
-  ์ถ”๊ฐ€ ๋ฐ ๋ณ€๊ฒฝ๋œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•ด ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€ ์ปดํฌ๋„ŒํŠธ(DetailedReviewPage) ๋ฆฌํŒฉํ† ๋ง
- DetailedReviewPage ํด๋”์˜ styles.ts ์‚ญ์ œ

* refactor: review์— ๋Œ€ํ•œ ํƒ€์ž… ๋ณ€๊ฒฝ

* design : ReviewDate์˜ ํด๋ก  ์Šคํƒ€์ผ ์ ์šฉ

* feat: KeywordSection ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ

- ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€ ํ‚ค์›Œ๋“œ ๋ถ€๋ถ„ ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ

* feat: ReviewSectionHeader ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ ๋ฐ ์ ์šฉ

- ๋ฆฌ๋ทฐ ์ƒ์„ธ๋ณด๊ธฐ์—์„œ ๋ฐ˜๋ณต๋˜๋Š” ์งˆ๋ฌธ,ํ‚ค์›Œ๋“œ ํ—ค๋”๋ถ€๋ถ„์„ ์ปดํฌ๋„ŒํŠธ๋กœ ๋ถ„๋ฆฌ

* design : ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€์— width ๋ณ€๊ฒฝ

* refactor: DetailedReview์˜ ๋ชฉ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ๋ฐ ๋ฆฌํŒฉํ† ๋ง

- ํƒ€์ž… ๋ณ€๊ฒฝ์— ๋”ฐ๋ฅธ ๋ชฉ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ
- KeywordSection ์ ์šฉ

* design : formWidth๋ฅผ theme์— ์ถ”๊ฐ€ ๋ฐ ๋ฆฌ๋ทฐ ์ž‘์„ฑ/๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€์— ์ ์šฉ

* fix: Layout์—์„œ ๊ฐ€๋กœ ์Šคํฌ๋กค ์ƒ๊ธฐ๋Š” ์˜ค๋ฅ˜ ์ˆ˜์ •

- 100vw๋Š” ์Šคํฌ๋กค์„ ํฌํ•จํ•œ ๋ทฐํฌํŠธ ๋„ˆ๋น„๋ผ์„œ 100%์œผ๋กœ ์ˆ˜์ •

* feat: ๋ฆฌ๋ทฐ ์ƒํŽ˜์ด์ง€ router์— ๋ผ์šฐํ„ฐ ํŒŒ๋ผ๋ฏธํ„ฐ ์ ์šฉ ๋ฐ ๊ด€๋ จ ์„ค์ • ๋ณ€๊ฒฝ

- ๋ฐ๋ชจ๋ฐ์ด๋ฅผ ์œ„ํ•ด ํ˜„์žฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์žˆ๋Š” ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€ id๋ฅผ sidebar์˜ ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€ ๋ฉ”๋‰ด link์— ์ ์šฉ
- ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€(DetailedReviewPage)์˜ api ํ•ธ๋“ค๋Ÿฌ ์ˆ˜์ •

* docs: ๋ณ€์ˆ˜๋ช… ๋ณ€๊ฒฝ (isLock -> isPublic)

* refactor: ๊นƒํ—™ ์ €์žฅ์†Œ ๋กœ๊ณ  ์ฃผ์†Œ ๋ณ€์ˆ˜๋ช… ๋ณ€๊ฒฝ

- projectImgSrc -> thumbnailUrl

* ci: msw ๊ด€๋ จ ํŒจํ‚ค์ง€ ์„ค์น˜

* ci: msw ๊ด€๋ จ ์„ค์ •ํŒŒ์ผ ์ถ”๊ฐ€

- ๋ธŒ๋ผ์šฐ์ € ํ™˜๊ฒฝ, node ํ™˜๊ฒฝ์—์„œ msw๋กœ ๋ชฉ์„œ๋ฒ„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ด€๋ จ ํŒŒ์ผ ์ถ”๊ฐ€

* feat: mock ํ•ธ๋“ค๋Ÿฌ ์ถ”๊ฐ€ ๋ฐ ์ƒ์„ธ ๋ฆฌ๋ทฐ ํŽ˜์ด์ง€ ๋ชฉ ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€

* feat:  root์—์„œ ๋ชฉ์„œ๋ฒ„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋กํ•จ

* refactor: endpoint ์ˆ˜์ •

- env ์—์„œ ์„œ๋ฒ„ ์ฃผ์†Œ ๋์— ์Šฌ๋ž˜์‹œ ๋„ฃ๋Š” ๊ฒƒ์œผ๋กœ ํ†ต์ผ

* feat: ์ƒ์„ธ ๋ฆฌ๋ทฐ ํŽ˜์ด์ง€(detailedReviewPage)์— ๋ชฉ์„œ๋ฒ„ ์—ฐ๊ฒฐ ๋ฐ ๊ด€๋ จ ์ฝ”๋“œ ์ˆ˜์ •

- ์ƒํƒœ๋ช… ๋ณ€๊ฒฝ: detailReview -> detailedReview
- detailedReview ํƒ€์ž…์— null ์ถ”๊ฐ€ ๋ฐ ๊ทธ์— ๋”ฐ๋ฅธ ์˜ค๋ฅ˜ ํ•ธ๋“ค๋ง ์ถ”๊ฐ€
- deadline์— string ํƒ€์ž…์œผ๋กœ response๋กœ ์ „๋‹ฌ๋˜์–ด์„œ new Date๋กœ ๊ฐ์‹ธ์„œ props๋กœ ์ „๋‹ฌ

* docs: indexhtml์˜ title ๋ณ€๊ฒฝ

* style: apis/review.ts ์˜ import ๊ด€๋ จ eslint rule ์ ์šฉ์— ๋”ฐ๋ฅธ ์ˆ˜์ •

* fix: ts์—์„œ process ์ฝ์ง€ ๋ชปํ•˜๋Š” ์˜ค๋ฅ˜ ์ˆ˜์ •

* fix: webpack dev server script ๋ณต์›

* feat: ModalPortal ์…์„ฑ

* feat: SideModal ์ปดํฌ๋„ŒํŠธ, useSide  ์…์„ฑ ๋ฐ Sidebar์— ์ ์šฉ

* feat: ModalBackground ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ ๋ฐ ์ ์šฉ

* fix: ๋ชจ๋‹ฌ ์—ด๋ฆด ๋•Œ ์Šคํฌ๋กค๋ฐ” ๋ง‰๋Š” ๊ธฐ๋Šฅ ์˜ค๋ฅ˜ ์ˆ˜์ •

* design : ModalPortal ์‚ฌ์ด์ฆˆ ๋‹จ์œ„ ๋ณ€๊ฒฝ (% -> vw, vh)

* feat: Button ์ปดํฌ๋„ŒํŠธ๊ฐ€ button ์†์„ฑ์„ props๋กœ ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก ์ˆ˜์ •

* feat: ConfirmModal ์ƒ์„ฑ

* refactor: index.tsx์—์„œ ๋ชจ๋‹ฌ์„ ๊บผ๋‚ผ ์ˆ˜ ์žˆ๋„๋ก ๋ฆฌํŒฉํ† ๋ง

* refactor: PropsWithChildren ์ˆ˜์ •

- PropsWithChildren๋ฅผ import ํ•˜์ง€ ์•Š๊ณ  React์—์„œ ๋ฐ”๋กœ ์“ธ ์ˆ˜ ์žˆ๋„๋ก React.PropsWithChildren๋กœ  ์ˆ˜์ •

* [FE] msw๊ด€๋ จ env ์˜ค๋ฅ˜ ํ•ด๊ฒฐ  (#114)

* chore: fe/feat/105-review-writing-msw  ์˜  endpoint ๊ด€๋ จ ๋ณ€๊ฒฝ์‚ฌํ•ญ ๋ฐ˜์˜

* fix: NODE_ENV ๊ด€๋ จ ์˜ค๋ฅ˜ ์ˆ˜์ •

- ์˜ค๋ฅ˜ : env ํŒŒ์ผ์— NODE_ENV๊ฐ€ ์—†์Œ์—๋„ ์ด๋ฅผ ์ธ์‹ํ•˜๋Š” ์˜ค๋ฅ˜ ๋ฐœ์ƒ
- ์›์ธ: ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ NODE_ENV๋ฅผ ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๋‹ค๊ณ  ํ•จ
- ํ•ด๊ฒฐ: NODE_ENV๋ฅผ ์‚ญ์ œํ•˜๊ณ  MSW๋ฅผ ์‚ฌ์šฉ

* [BE] feat: ๋‚ด๊ฐ€ ๋ฐ›์€ ๋ฆฌ๋ทฐ ๋ณด๊ธฐ ๊ธฐ๋Šฅ ๊ตฌํ˜„ (#109)

* refactor: contains ์ž‘๋™์„ ์œ„ํ•œ EqualsAndHashcode ์ถ”๊ฐ€

* fix: lazyInitialization ํ•ด๊ฒฐ

* feat: ์งˆ๋ฌธ ๋ ˆํฌ์ง€ํ† ๋ฆฌ ์ƒ์„ฑ

* feat: ๋‚ด๊ฐ€ ๋ฐ›์€ ๋ฆฌ๋ทฐ ์‘๋‹ต ์ƒ์„ฑ

* refactor: ๋ฆฌ๋ทฐ ํ•ญ๋ชฉ๊ณผ ์งˆ๋ฌธ์˜ ์—ฐ๊ด€๊ด€๊ณ„ ๋ณ€๊ฒฝ ๋ฐ ๋‹ต๋ณ€ ์ตœ๋Œ€ ๊ธ€์ž์ˆ˜ DB์— ๋ฐ˜์˜

* refactor: ๋ฆฌ๋ทฐ์— ๋ฆฌ๋ทฐ๊ทธ๋ฃน ์ดˆ๊ธฐํ™” ๋ถ€๋ถ„ ์ถ”๊ฐ€

* feat: ๋‚ด๊ฐ€ ๋ฐ›์€ ๋ฆฌ๋ทฐ ์กฐํšŒ ๊ธฐ๋Šฅ ๊ตฌํ˜„

* feat: ๋ฐ›์€ ๋ฆฌ๋ทฐ๊ฐ€ ์—†์„ ๋•Œ์˜ ์‘๋‹ต ์ถ”๊ฐ€

* refactor: dto ์„ค๋ช… ์ถ”๊ฐ€

* refactor: dto ์„ค๋ช… ์ˆ˜์ •

* refactor: ์ธ์ž ํ˜•์‹ ์ˆ˜์ •, ๊ฐœํ–‰ ์ˆ˜์ •

* refactor: transactional ์–ด๋…ธํ…Œ์ด์…˜ ์ถ”๊ฐ€

* refactor: ๋‚ด๊ฐ€ ๋ฐ›์€ ๋ฆฌ๋ทฐ ์กฐํšŒํ•  ๋•ŒPage๊ฐ์ฒด ๋ง๊ณ  List๋กœ ๋ฐ›์•„์˜ค๋„๋ก ์ˆ˜์ •

* refactor: ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๋งŒ๋“œ๋Š” ๊ธฐ๋Šฅ ๋„๋ฉ”์ธ ์•ˆ์œผ๋กœ ์ด๋™

* test: ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ๊ฐœ์„ 

- ๋ณ€์ˆ˜๋ช… ์ˆ˜์ •, save ์—ฌ๋Ÿฌ๊ฐœ ๋Œ€์‹  saveAll ์‚ฌ์šฉ ๋“ฑ

* refactor: ๋งˆ์ง€๋ง‰์œผ๋กœ ๋ณธ ๋ฆฌ๋ทฐID๊ฐ€ ์—†๋Š” ๋กœ์ง์— ๋Œ€ํ•ด ์ˆ˜์ •

- lastViewedReviewId๋ฅผ ์ž…๋ ฅํ•˜์ง€ ์•Š์œผ๋ฉด 999๊ฐ™์ด ์ด์ƒํ•˜๊ฒŒ ํฐ ์ˆ˜๋ฅผ ๋„ฃ์–ด์ฃผ๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ, ๊ฐ€์žฅ ํฐ ๊ฐ’์„ ๋„ฃ์–ด์ฃผ๋„๋ก ์ˆ˜์ •

* docs: ์Šค์›จ๊ฑฐ ๋ฐ์ฝ”๋ ˆ์ด์…˜ ์ ์šฉ

* refactor: lastReviewId๊ฐ€ null ์ด์–ด๋„ ๊ฐ€์žฅ ์ตœ์‹  ๋ฆฌ๋ทฐ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋„๋ก ์ˆ˜์ •

* refactor: eqaulsAndHashCode ์žฌ์ •์˜

* refactor: eqaulsAndHashCode ์žฌ์žฌ์ •์˜

* refactor: API Docs ๋ฐ˜์˜

---------

Co-authored-by: donghoony <[email protected]>

* fix: ์ž˜๋ชป ์ •์˜๋œ endpoint ์ˆ˜์ • (#118)

* [FE] ๋จธ์ง€๋กœ ์ธํ•ด ์‚ฌ๋ผ์ง„ ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ ๋ณต๊ตฌ ๋ฐ ๋ฐ์ดํ„ฐ ํƒ€์ž… ๋ณ€๊ฒฝ (#121)

* refactor: ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€ ๋ฐ์ดํ„ฐ ํƒ€์ž… ๋ณ€๊ฒฝ ๋ฐ Keyword ํƒ€์ž… ๋ณต๊ตฌ

* fix: ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€์˜ path ๋ณต๊ตฌ

* fix: ์‚ฌ์ด๋“œ๋ฐ”์˜ ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€ ๊ฒฝ๋กœ ๋ณต๊ตฌ

* refactor: ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€ ๋ฐ์ดํ„ฐ ํƒ€์ž… ๋ณ€๊ฒฝ์— ๋”ฐ๋ฅธ ๋ชฉ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ

* fix: DetailedReviewPage ๋ณต๊ตฌ ๋ฐ ๋ฐ์ดํ„ฐ ํƒ€์ž… ๋ณ€๊ฒฝ์— ๋”ฐ๋ฅธ ์ˆ˜์ •

* [BE] ๋”๋ฏธ ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€, local ํ”„๋กœํŒŒ์ผ ๊ด€๋ฆฌ (#123)

* refactor: Unauthorized ์˜ˆ์™ธ ์ฒ˜๋ฆฌ

* chore: ๋”๋ฏธ ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€ ๋ฐ Profile ์ฒ˜๋ฆฌ

* chore: ํ…Œ์ŠคํŠธ yml ์ƒ์„ฑ

* fix: Long notblank -> notnull (#126)

* [FE] ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํŽ˜์ด์ง€์—์„œ msw๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจํ‚น (#124)

* feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํŽ˜์ด์ง€์—์„œ msw๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจํ‚น

Co-Authored-By: badahertz52 <[email protected]>
Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: Fe <[email protected]>

* chore: ์—”๋“œํฌ์ธํŠธ baseurl์— '/' ์ถ”๊ฐ€

Co-Authored-By: badahertz52 <[email protected]>
Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: Fe <[email protected]>

---------

Co-authored-by: badahertz52 <[email protected]>
Co-authored-by: ImxYJL <[email protected]>
Co-authored-by: Fe <[email protected]>

* fix: ๋ฆฌ๋ทฐ ๋ชฉ๋ก DTO ํ•„๋“œ ์ˆ˜์ • (#129)

* [FE] msw ๋ชจํ‚น์„ ์œ„ํ•œ ๋ฆฌ๋ทฐ ๋ฐ์ดํ„ฐ ํ•˜๋“œ์ฝ”๋”ฉ (#130)

* refactor: msw ๋ชจํ‚น์„ ์œ„ํ•œ ๋ฆฌ๋ทฐ ๋ฐ์ดํ„ฐ ํ•˜๋“œ์ฝ”๋”ฉ

Co-Authored-By: ImxYJL <[email protected]>

* refactor: 2์ฐจ ๋ฐ๋ชจ๋ฐ์ด๋ฅผ ์œ„ํ•œ ๋ฉค๋ฒ„ ์•„์ด๋”” ์ƒ์ˆ˜ํ™”

Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: badahertz52 <[email protected]>
Co-Authored-By: Fe <[email protected]>

* chore: ๋ถˆํ•„์š”ํ•œ ์ฝ˜์†” ๋กœ๊ทธ ์ œ๊ฑฐ

Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: badahertz52 <[email protected]>
Co-Authored-By: Fe <[email protected]>

---------

Co-authored-by: ImxYJL <[email protected]>
Co-authored-by: badahertz52 <[email protected]>
Co-authored-by: Fe <[email protected]>

* [FE] endPoint ์˜ค๋ฅ˜์™€ ๋ฆฌ๋ทฐ ๊ทธ๋ฃน ์•„์ด๋”” ์ˆ˜์ • (#132)

* fix: endpoint ์˜ค๋ฅ˜ ์ˆ˜์ •

* fix: ๋ฆฌ๋ทฐ ์ƒ์„ฑ์„ ์œ„ํ•œ ๋ฐ์ดํ„ฐ ๋ฐ›์„ ๋•Œ์˜ ๋ฆฌ๋ทฐ ๊ทธ๋ฃน ์•„์ด๋””๋ฅผ 1๋กœ ์ˆ˜์ •

* [BE] fix: ๋ฆฌ๋ทฐ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ ์ƒ์„ฑ ๊ธฐ๋Šฅ ์ˆ˜์ • (#134)

* fix: src/index.tsx์—์„œ enableMocking ์ œ๊ฑฐ (#136)

* [FE] Children ์†์„ฑ์ด ํ•„์ˆ˜์ธ ํƒ€์ž… ์ œ์ž‘ (#147)

* feat: children ์†์„ฑ์ด ํ•„์ˆ˜์ธ EssentialPropsWithChildren ํƒ€์ž… ์ƒ์„ฑ

* chore: types ํด๋”์˜ index ํŒŒ์ผ์— ๋ˆ„๋ฝ๋๋˜ export๋“ค ์ถ”๊ฐ€ ๋ฐ ๊ทธ์— ๋”ฐ๋ฅธ types import๋ฌธ ๊ฒฝ๋กœ ์ˆ˜์ •

* [FE] ์‚ฌ์ด๋“œ๋ฐ” ๋ฐ ๋ชจ๋‹ฌ ์‚ฌ์šฉ์„ฑ ๊ฐœ์„  (#139)

* refactor: ์‚ฌ์ด๋“œ๋ฐ”๋ฅผ ๋‹ซ๋Š” ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ œ๊ฑฐ

* refactor: ์‚ฌ์ด๋“œ๋ฐ”๊ฐ€ ๋” ๋นจ๋ฆฌ ์—ด๋ฆฌ๋„๋ก ์ˆ˜์ •

* feat: ๋ชจ๋‹ฌ์˜ ๋ฐฐ๊ฒฝ ํด๋ฆญ ๋ฐ esc ํ‚ค๋ฅผ ๋ˆŒ๋ €์„ ๋•Œ ๋ชจ๋‹ฌ์ด ๋‹ซํžˆ๋Š” ๊ธฐ๋Šฅ ์ถ”๊ฐ€

* chore: hooks index์— useModalClose ์ถ”๊ฐ€

* feat: ์‚ฌ์ด๋“œ๋ฐ” ๋ฆฌ์ŠคํŠธ ์•„์ดํ…œ์„ ํด๋ฆญํ–ˆ์„ ๋•Œ ์‚ฌ์ด๋“œ๋ฐ”๊ฐ€ ๋‹ซํžˆ๋Š” ๊ธฐ๋Šฅ ์ถ”๊ฐ€

* refactor: useModalClose ํ›…์„ ๋ชจ๋“  ๋ชจ๋‹ฌ์˜ ๊ณตํ†ต ์ตœ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ์ธ ModalBackground์—์„œ ์ฒ˜๋ฆฌํ•˜๋„๋ก ์ˆ˜์ •

* refactor: ModalBackground๋ฅผ ํด๋ฆญํ–ˆ์„ ๋•Œ ๋ชจ๋‹ฌ์ด ๋‹ซํžˆ๊ฒŒ ํ•˜๋Š” ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ๋ฅผ document ๋Œ€์‹  Background์— ์ถ”๊ฐ€

* fix: esc๋ฅผ ์‚ฌ์šฉํ•ด ๋ชจ๋‹ฌ์„ ๋‹ซ์•˜์„ ๋•Œ ํ–„๋ฒ„๊ฑฐ ๋ฒ„ํŠผ์— ํฌ์ปค์Šค๊ฐ€ ์ƒ๊ธฐ๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ ๋ฐ ๋ณ€์ˆ˜๋ช… ๋Œ€์†Œ๋ฌธ์ž ์ˆ˜์ •

* refactor: useEffect ๋‚ด๋ถ€ ํ•จ์ˆ˜๋“ค์„ ํ›… ์™ธ๋ถ€๋กœ ์ด๋™ ๋ฐ ์ฃผ์„ ์ถ”๊ฐ€

* [FE] ์กด์žฌํ•˜์ง€ ์•Š๋Š” element์— ๋Œ€ํ•œ ์—๋Ÿฌ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ์œ ํ‹ธ๋ฆฌํ‹ฐ ํ•จ์ˆ˜ ์ œ์ž‘ (#150)

* feat: ์กด์žฌํ•˜์ง€ ์•Š๋Š” element์— ๋Œ€ํ•œ ์—๋Ÿฌ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ํ›… ์ œ์ž‘

* chore: hooks ํด๋” index์— useExistentElement ์ถ”๊ฐ€

* refactor: useExistentElement ํ›…์„ ๋”์šฑ ๋ฒ”์šฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ˆ˜์ •

* refactor: ์กด์žฌํ•˜์ง€ ์•Š๋Š” ์š”์†Œ๋ฅผ ํŒ๋ณ„ํ•˜๋Š” ๋™์ž‘์„ ์ปค์Šคํ…€ ํ›… ๋Œ€์‹  ์œ ํ‹ธ๋ฆฌํ‹ฐ ํ•จ์ˆ˜๋กœ ์ œ์ž‘

* chore: ๊ธฐ์กด์˜ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ์š”์†Œ๋ฅผ ํƒ์ง€ํ•˜๋Š” ์ปค์Šคํ…€ ํ›… ์‚ญ์ œ

* [FE] HTTP ์š”์ฒญ ์˜ค๋ฅ˜ ์‹œ status code๋ณ„ ์˜ค๋ฅ˜ ์ƒํ™ฉ์„ ๋Œ€์‘ํ•˜๋Š” ํ•จ์ˆ˜ ์ƒ์„ฑ (#151)

* feat: api ์—๋Ÿฌ ์‹œ ํ‘œ์‹œํ•œ ๋ฉ”์„ธ์ง€ ์ƒ์„ฑ ํ•จ์ˆ˜ ์ถ”๊ฐ€

* refactor: api/review.ts์— api ์˜ค๋ฅ˜ ์‹œ ๋ฉ”์„ธ์ง€๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” createApiErrorMessage ํ•จ์ˆ˜ ์ ์šฉ

* docs: http ์š”์ฒญ ์‹คํŒจ ๋ฉ”์„ธ์ง€ ์ˆ˜์ •

* fix: ์˜คํƒ€ ์ˆ˜์ •

* [FE] ํŽ˜์ด์ง€ ์ƒ๋‹จ ์ด๋™ ๋ฒ„ํŠผ ๊ตฌํ˜„ (#153)

* feat: top button ๋กœ์ง ํ›…์œผ๋กœ ๊ตฌํ˜„

* design: top button UI ๊ตฌํ˜„

* chore: ๊ฐ ํŽ˜์ด์ง€๋งˆ๋‹ค top button์ด ๋ณด์—ฌ์ง€๋„๋ก ์„ค์ •

* chore: ์ปดํฌ๋„ŒํŠธ default๋กœ exportํ•˜๋„๋ก ์„ค์ •

* refactor: handler๋ฅผ useEffect ์™ธ๋ถ€๋กœ ๋ถ„๋ฆฌ

* chore: svg import ์ปจ๋ฒค์…˜์— ๋งž์ถ”์–ด ์ด๋ฆ„ ์ˆ˜์ •

* [FE] feat: ์—๋Ÿฌ, ๋กœ๋”ฉ ํŽ˜์ด์ง€ ๊ตฌํ˜„ ๋ฐ ์ ์šฉ (#155)

* feat: ๋ฒ„ํŠผ ์ปดํฌ๋„ŒํŠธ์— ์•„์ด์ฝ˜์„ ์„ ํƒ์ ์œผ๋กœ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ณ€๊ฒฝ

- `icon` prop์„ ํ†ตํ•ด ๋ฒ„ํŠผ์— ์•„์ด์ฝ˜์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ณ€๊ฒฝ

* feat: ์—๋Ÿฌ ํŽ˜์ด์ง€๋ฅผ ์œ„ํ•œ ErrorSection ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„

- ์—๋Ÿฌ ๋กœ๊ณ , ๋ฉ”์‹œ์ง€, ์ƒˆ๋กœ๊ณ ์นจ ๋ฐ ํ™ˆ ์ด๋™ ๋ฒ„ํŠผ ์ œ๊ณต

* feat: ๋ผ์šฐํ„ฐ ์„ค์ •์—์„œ `errorElement`์— `ErrorPage` ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ถ”๊ฐ€

* feat: ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ ์ƒˆ๋กœ๊ณ ์นจ ๋ฐ ํ™ˆ ์ด๋™ ๊ธฐ๋Šฅ ์ถ”๊ฐ€

* feat: LoadingBar ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„

* feat: ๋กœ๋”ฉ ํŽ˜์ด์ง€ ์ถ”๊ฐ€ ๋ฐ ์ ์šฉ

- ๋กœ๋”ฉ ๋ฉ”์‹œ์ง€ ์ถ”๊ฐ€
- ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํŽ˜์ด์ง€, ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํŽ˜์ด์ง€, ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€์— ๋กœ๋”ฉ ํŽ˜์ด์ง€ ์ ์šฉ

* refactor: buttons ๋ฐฐ์—ด์„ ํ†ตํ•ด ๋ฒ„ํŠผ ์ƒ์„ฑ

* refactor: ์ฝ”๋“œ์ปจ๋ฒค์…˜์— ๋งž๊ฒŒ ์ฝ”๋“œ ์ˆ˜์ • ๋ฐ imageDescription์„ ๋ฒ„ํŠผ props์— ์ถ”๊ฐ€

* refactor: boolean ํƒ€์ž…์ถ”๋ก  ์ œ๊ฑฐ

* design: ์—๋Ÿฌ ์ปดํฌ๋„ŒํŠธ ํ™”๋ฉด ๊ฐ€์šด๋ฐ ๋ฐฐ์น˜

* design: ๋กœ๋”ฉ ์ปดํฌ๋„ŒํŠธ ํ™”๋ฉด ๊ฐ€์šด๋ฐ ๋ฐฐ์น˜

* [BE] refactor: ๋„๋ฉ”์ธ ์—ฐ๊ด€ ๊ด€๊ณ„ ์žฌ์ •์˜ (#156)

* refactor: ๋„๋ฉ”์ธ ์—ฐ๊ด€๊ด€๊ณ„ ์žฌ์ •์˜ ๋ฐ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋„๋ฉ”์ธ ์‚ญ์ œ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* test: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํ…Œ์ŠคํŠธ ์‚ญ์ œ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* fix: ์˜ˆ์•ฝ์–ด ์‚ฌ์šฉํ•˜์ง€ ์•Š๋„๋ก ์ˆ˜์ •

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* refactor: Review ๋„๋ฉ”์ธ์—์„œ reviewee ํ•„๋“œ ์ œ๊ฑฐ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* refactor: ๋ฆฌ๋ทฐ ์ €์žฅ ๊ธฐ๋Šฅ ๊ตฌํ˜„

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* refactor: ํ‚ค์›Œ๋“œ ์ €์žฅ ๊ธฐ๋Šฅ ๊ตฌํ˜„

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* refactor: ๋ฆฌ๋ทฐ ์ƒ์„ฑ ์š”์ฒญ ๊ฐ์ฒด ๊ตฌํ˜„

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* test: ๋ฆฌ๋ทฐ, ๋ฆฌ๋ทฐ ๋‚ด์šฉ ๋„๋ฉ”์ธ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* refactor: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ์‹œ ์งˆ๋ฌธ ๊ฒ€์ฆ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* fix: Review์˜ reviewGroupId ์ปฌ๋Ÿผ๋ช… ์ˆ˜์ •

* refactor: ๋ฆฌ๋ทฐ ์ƒ์„ฑ ์‹œ, ํ‚ค์›Œ๋“œ ๊ฒ€์ฆ์„ ๊ฐ์ฒด ๋ถ„๋ฆฌ

* refactor: ๋ฆฌ๋ทฐ ์ƒ์„ฑ ์‹œ, ์งˆ๋ฌธ ๊ฒ€์ฆ์„ ๊ฐ์ฒด ๋ถ„๋ฆฌ

* style: ์ฝ”๋“œ ์žฌ์ •๋ ฌ

* test: ๋ฆฌ๋ทฐ ์ƒ์„ฑ ๊ฒ€์ฆ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

* refactor: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํด๋ž˜์Šค ์‚ญ์ œ

* refactor: keyword ๊ด€๋ จ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํด๋ž˜์Šค ์‚ญ์ œ

* refactor: review ๊ด€๋ จ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํด๋ž˜์Šค ์‚ญ์ œ

* refactor: ๋ฐ์ดํ„ฐ ์ดˆ๊ธฐํ™” ๊ฐ์ฒด ์ˆ˜์ •

* test: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํ…Œ์ŠคํŠธ ์‚ญ์ œ

* refactor: ์˜ˆ์™ธ ๋ฉ”์„ธ์ง€ ๋งํˆฌ ํ†ต์ผ

* refactor: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์˜ˆ์™ธ ์ œ๊ฑฐ

* refactor: ์˜ˆ์™ธ ํด๋ž˜์Šค ํŒจํ‚ค์ง€ ๋ณ€๊ฒฝ

* refactor: NOT NULL ์ œ์•ฝ์กฐ๊ฑด ์ถ”๊ฐ€

* refactor: ํ…Œ์ŠคํŠธ์—์„œ๋งŒ ์‚ฌ์šฉ๋˜๋Š” ํ•จ์ˆ˜ ์ œ๊ฑฐ

* refactor: ํ…Œ์ŠคํŠธ ์‹คํ–‰ ์‹œ ๋ฐœ์ƒํ•˜๋Š” LazyInitializationException ํ•ด๊ฒฐ

* refactor: ํ‚ค์›Œ๋“œ ๊ฒ€์ฆ ํ•จ์ˆ˜ ์ˆœ์„œ ๋ณ€๊ฒฝ

* chore: ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ปจ๋ฒค์…˜ ํ†ต์ผ

* refactor: reviewRequestCode ๊ฒ€์ฆ ๋กœ์ง ์ด๋™

* refactor: ํ•„๋“œ์ธ questionRepository๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ๋ณ€๊ฒฝ

* refactor: ๋ฆฌ๋ทฐ์ด, ํ”„๋กœ์ ํŠธ ์ด๋ฆ„ ๊ธธ์ด ๊ฒ€์ฆ ํ•จ์ˆ˜ ๋ถ„๋ฆฌ

* test: ๋ฆฌ๋ทฐ ์ €์žฅ ์‹œ reviewKeywor ์ €์žฅ ๊ฒ€์ฆ ์ถ”๊ฐ€

---------

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>

* [All] infra: ๋””์Šค์ฝ”๋“œ ์›นํ›… ์‚ฌ์šฉํ•ด PR ์ƒ์„ฑ/์ฝ”๋ฉ˜ํŠธ ์‹œ ๋ฉ˜์…˜ (#169)

* feat: PR Request ์ƒ์„ฑ / Comment ์‹œ ๋””์Šค์ฝ”๋“œ ๋ฉ˜์…˜

* fix: Case-sensitive ID๋กœ ํ•ด๊ฒฐ, ALL webhook ์ถ”๊ฐ€

* fix: remove whitespace

* chore: rename workflow

* fix: fix shell script

* fix: step statement

* fix: remove trailing whitespace after equals sign

* [BE] feat: ๋ฆฌ๋ทฐ ๊ทธ๋ฃน ์ƒ์„ฑ API ๊ตฌํ˜„ (#163)

* feat: ๋žœ๋คํ•œ ๋ฌธ์ž์—ด ์ƒ์„ฑ๊ธฐ ๊ตฌํ˜„

Co-authored-by: donghoony <[email protected]>

* feat: ๋ฆฌ๋ทฐ ๊ทธ๋ฃน ์ƒ์„ฑ ์š”์ฒญ, ์‘๋‹ต ํ˜•์‹

Co-authored-by: donghoony <[email protected]>

* feat: ๋ฆฌ๋ทฐ ๊ทธ๋ฃน ์ƒ์„ฑ

Co-authored-by: hyeonjilee <[email protected]>
Co-authored-by: nayonsoso <[email protected]>

* feat: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ์ปจํŠธ๋กค๋Ÿฌ

Co-authored-by: hyeonjilee <[email protected]>
Co-authored-by: nayonsoso <[email protected]>

---------

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* [BE] refactor: ๋ฆฌ๋ทฐ ์ž‘์„ฑ์„ ์œ„ํ•œ ์ •๋ณด ์š”์ฒญ ๊ธฐ๋Šฅ ๋ฆฌํŒฉํ„ฐ๋ง (#162)

* refactor: ๋ถˆํ•„์š”ํ•œ update ๋ฐฉ์ง€

* feat: controller์— ๋ฆฌ๋ทฐ ์ƒ์„ฑ ์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต ๊ธฐ๋Šฅ ๊ตฌํ˜„

* feat: controller์— ๋ฆฌ๋ทฐ ์ž‘์„ฑ์„ ์œ„ํ•ด ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์‘๋‹ต ๊ธฐ๋Šฅ ๊ตฌํ˜„

* feat: service์— ๋ฆฌ๋ทฐ ์ž‘์„ฑ์„ ์œ„ํ•ด ํ•„์š”ํ•œ ์ •๋ณด ์กฐํšŒ
 ๊ธฐ๋Šฅ ๊ตฌํ˜„

* chore: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” dto ์‚ญ์ œ

* test: ๋ฆฌ๋ทฐ ๋ฆฌ๋ทฐ ์ž‘์„ฑ์„ ์œ„ํ•ด ํ•„์š”ํ•œ ์ •๋ณด ์กฐํšŒ ๊ธฐ๋Šฅ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ

* refactor: swagger ์„ค์ • ์ผ๋ถ€ ์ˆ˜์ • ๋ฐ ์—๋Ÿฌ ์‘๋‹ต์ฝ”๋“œ ๋…ธ์ถœ๋˜๋„๋ก ๋ณ€๊ฒฝ

* refactor: service์—์„œ ์›์‹œํƒ€์ž… long์„ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ๋ณ€๊ฒฝ

* docs: api ๋ฌธ์„œ dto ํ•ญ๋ชฉ์„ค๋ช… ๋ณ€๊ฒฝ

* test: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ณ€์ˆ˜ ์„ ์–ธํ•˜์ง€ ์•Š๋„๋ก ๋ณ€๊ฒฝ

* docs: api ๋ฌธ์„œ ๊ฒ€์ฆ ๋‚ด์šฉ์— ๋Œ€ํ•œ ์–ด์ฒด ๋ณ€๊ฒฝ

* refactor: ํŠธ๋žœ์žญ์…˜ ์กฐํšŒ ๋ช…์‹œ ์ถ”๊ฐ€

* refactor: dto ์ด๋ฆ„ ๋ณ€๊ฒฝ

* [FE] ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€์— react-query ์ถ”๊ฐ€ ๋ฐ ๋ฆฌํŒฉํ† ๋ง (#161)

* fix: src/index.tsx์—์„œ enableMocking ์ œ๊ฑฐ

* feat: ๋ฆฌ๋ทฐ ๊ทธ๋ฃน ์ƒ์„ฑ ์‹œ ์ฝ”๋ฉ˜ํŠธ ์ปดํฌ๋„ŒํŠธ๋ช… ๋ณ€๊ฒฝ ๋ฐ ๊ธฐ๋ณธ๊ฐ’ ์„ค์ •

- ์ปดํฌ๋„ŒํŠธ๋ช… ๋ณ€๊ฒฝ: RevewComment -> ReveweeComments
-  reviewGroup์˜ description์ด ๋นˆ๋ฌธ์ž์—ด์ด๋ฉด ๊ธฐ๋ณธ๊ฐ’์„ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒƒ์œผ๋กœ ๋ณ€๊ฒฝ

* refactor: ์„œ๋ฒ„ DB์— ์žˆ๋Š” ๋ฆฌ๋ทฐ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ์ƒ์ˆ˜ํ™”

- ํ˜„์žฌ DB์— ์žˆ๋Š” ๋ฆฌ๋ทฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชฉ ์„œ๋ฒ„์—์„œ๋„ ์‚ฌ์šฉํ•˜๊ณ , ์‚ฌ์ด๋“œ๋ฐ” ํŽ˜์ด์ง€ ์ด๋™ ์‹œ์—๋„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ด€๋ จ value๋“ค์„ ์ƒ์ˆ˜ํ™” ํ•จ

* feat : QueryClient, QueryClientProvider ์ ์šฉ

- src/index.tsx์— QueryClient, QueryClientProvider ์ ์šฉ

* fix: dependencies์— ์žˆ๋Š” ํ…Œ์ŠคํŠธ ํŒจํ‚ค์ง€๋“ค์„ devDependencies๋กœ ์˜ฎ๊น€

* feat: ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€์— react-query ์ ์šฉ

* feat : msw์— ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€ 404 ์˜ค๋ฅ˜ ์ถ”๊ฐ€

* ci: react-error-boundary ์„ค์น˜

* feat: Outlet์— QueryErrorResetBoundary,ErrorBoundary, Suspense ์ ์šฉ

* feat: ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€์— useSuspenseQuery ์ ์šฉ

* refactor: ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€ resource, queryString key ์ƒ์ˆ˜ํ™”

* refactor:  ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€ react-query key ์ƒ์ˆ˜ํ™”

* refactor: ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€ ์ปดํฌ๋„ŒํŠธ ์†์—์„œ๋งŒ ์‚ฌ์šฉํ•˜๋Š” ์ƒ์ˆ˜๋“ค ์ƒ์ˆ˜ํ™”

* refactor: DetailedReviewPage/components์— index.tsx๋ฅผ ์ถ”๊ฐ€ํ•ด import ๊ฒฝ๋กœ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ˆ˜์ •

* feat: error ์ „ํŒŒ๋ฅผ ์œ„ํ•œ QueryClient ์˜ต์…˜ ์ถ”๊ฐ€

-  react-query์˜ query, mutation์—์„œ error๊ฐ€ ์ „ํŒŒ๋˜๋„๋ก QueryClient ์˜ต์…˜ ์„ค์ •

* fix: ErrorPage์˜ SideModal์— closeModal props๋กœ ์คŒ

* refactor: ErrorSection ์œ„์น˜ ๋ณ€๊ฒฝ(src/pages/ErrorPage -> src/components/error)

* feat: ErrorFallback ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ

* feat: ErrorSuspenseContainer ์ƒ์„ฑ ๋ฐ App.tsx์— ์ ์šฉ

* chore: constants/index.ts export ๊ฒฝ๋กœ ๋ณ€๊ฒฝ

- ์ค‘๋ณต๋˜๋Š” apiErrorMessage ์‚ญ์ œ
- queryKeys ์ถ”๊ฐ€

* chore: 3์ฐจ-1์ฃผ์ฐจ ํ•ต์‹ฌ ๊ธฐ๋Šฅ ์‹œํ˜„ ๋•Œ ํ•„์š” ์—†๋Š” ์ฝ”๋“œ ์ฃผ์„ ์ฒ˜๋ฆฌ

* docs: ErrorPage์˜ ERROR_MESSAGE ์ˆ˜์ •

* design: formWidth ๋ณ€๊ฒฝ ๋ฐ fontSize์— 1.4rem ์ถ”๊ฐ€

* feat: ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€์— ๋ฆฌ๋ทฐ์ด ์ด๋ฆ„ ์ถ”๊ฐ€

- ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€ ๋ชฉ๋ฐ์ดํ„ฐ, ๋ฐ์ดํ„ฐ ํƒ€์ž…์— ๋ฆฌ๋ทฐ์ด ์ด๋ฆ„ ์ถ”๊ฐ€
- ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€ ์ปดํฌ๋„ŒํŠธ์— ๋ฆฌ๋ทฐ์ด ์ด๋ฆ„ ์ถ”๊ฐ€ ๋ฐ ๊ด€๋ จ ์Šคํƒ€์ผ ์ถ”๊ฐ€

* refactor: ๋ถˆํ•„์š”ํ•œ export ์‚ญ์ œ

* chore: type๋ช… ์ˆ˜์ • (RevieweeCommentProps =>RevieweeCommentsProps)

* refactor: ErrorSection์œผl Button ์ˆ˜์ •

* refactor: ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€ ๋ฐ์ดํ„ฐ ํƒ€์ž… ๋ณ€๊ฒฝ์— ๋”ฐ๋ฅธ ์ˆ˜์ •

* refactor: ErrorSuspenseContainer ์ ์šฉ ์œ„์น˜ ๋ณ€๊ฒฝ

- App๊ฐ€ ์•„๋‹Œ router์˜ element์—์„œ ์ ์šฉํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณ€๊ฒฝ

* refactor: ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€ ๋ฐ์ดํ„ฐ ํƒ€์ž… ๊ฐ•์ œ ๋ฐฉ๋ฒ• ๋ณ€๊ฒฝ

* chore: ๋ถˆํ•„์š”ํ•œ ์ฃผ์„ ์‚ญ์ œ

* refactor: ErrorSection์˜ buttons ๋„ค์ด๋ฐ ๋ณ€๊ฒฝ ๋ฐ ์š”์†Œ์— key ์ถ”๊ฐ€

- buttons -> buttonList

* chore: ์Šคํƒ€์ผ ์ฃผ์„์— NOTE ์ถ”๊ฐ€

* [BE] feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ์กฐํšŒ  (#179)

* feat: ๋ฆฌ๋ทฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ

Co-authored-by: nayonsoso <[email protected]>

* feat: ๋‚ด๊ฐ€ ๋ฐ›์€ ๋ฆฌ๋ทฐ ๋ชฉ๋ก ์‘๋‹ต ์ƒ์„ฑ

Co-authored-by: donghoony <[email protected]>

* feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ์กฐํšŒ

Co-authored-by: nayonsoso <[email protected]>

* refactor: Cascade ์ ์šฉ์œผ๋กœ ๋ถˆํ•„์š”ํ•œ save ์ œ๊ฑฐ

Co-authored-by: nayonsoso <[email protected]>

* refactor: ๋ฆฌ๋ทฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์ƒ์„ฑ ๊ฐ์ฒด ๋„์ถœ

Co-authored-by: nayonsoso <[email protected]>

---------

Co-authored-by: nayonsoso <[email protected]>

* fix: ๋ธŒ๋ผ์šฐ์ € ํƒ€์ดํ‹€ ์˜คํƒ€ ์ˆ˜์ • (#167)

* [BE] feat: ๋ฆฌ๋ทฐ ์ƒ์„ธ ์กฐํšŒ ๊ธฐ๋Šฅ ๊ตฌํ˜„ (#182)

* feat: ์ปจํŠธ๋กค๋Ÿฌ ๋ฆฌ๋ทฐ
์ƒ์„ธ ์กฐํšŒ api ์‘๋‹ต ๊ธฐ๋Šฅ ๊ตฌํ˜„

* feat: ๋ฆฌ๋ทฐ ์ƒ์„ธ ์กฐํšŒ api ์‘๋‹ต ๊ฐ์ฒด ๊ตฌํ˜„

* refactor: ๋ฆฌ๋ทฐ ์ƒ์„ธ ์กฐํšŒ api ์‘๋‹ต ๊ฐ์ฒด๋ช… ๋ณ€๊ฒฝ

* feat: ์„œ๋น„์Šค ๋ฆฌ๋ทฐ ์ƒ์„ธ ์กฐํšŒ ๊ธฐ๋Šฅ ๊ตฌํ˜„

* test: ๋ฆฌ๋ทฐ ์ƒ์„ธ ์กฐํšŒ ๊ธฐ๋Šฅ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

* style: ์˜คํƒ€ ๋ฐ ๊ฐœํ–‰ ์ˆ˜์ •

* refactor: ๋‚ ์งœ ์‘๋‹ต ์‹œ, ์ผ์ž๊นŒ์ง€๋งŒ ์‘๋‹ตํ•˜๋„๋ก ๋ณ€๊ฒฝ

* refactor: ๋ฆฌ๋ทฐ ์กฐํšŒ ๊ถŒํ•œ ๊ฒ€์ฆ ๋กœ์ง์„ repository ์‚ฌ์šฉํ•˜๋„๋ก ๋ณ€๊ฒฝ

* refactor: ๊ฒ€์ฆ๋ฉ”์„ธ์ง€ ๋ณ€๊ฒฝ

* refactor: ๋ฆฌ๋ทฐ ์„œ๋น„์Šค์—์„œ ๋ฆฌ๋ทฐ ๊ทธ๋ฃน์„ ์ฐพ์„ ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ์˜ˆ์™ธ ํด๋ž˜์Šค ๋ณ€๊ฒฝ

* refactor: ๋ฆฌ๋ทฐ ์ƒ์„ธ ์กฐํšŒ ๋ฉ”์„œ๋“œ๋ช… ๋ณ€๊ฒฝ

* refactor: ํ—ค๋”๋ช… ์ƒ์ˆ˜ํ™”

* [FE] recoil์„ ํ†ตํ•œ groupAccessCode ์ „์—ญ ์ƒํƒœ ๊ด€๋ฆฌ (#180)

* ci: recoil ์„ค์น˜

* feat: src/index.ts์— RecoilRoot ์ ์šฉ

* feat: groupAccessCode ์— ๋Œ€ํ•œ atom ์ƒํƒœ ์ถ”๊ฐ€

* feat: useGroupAccessCode ํ›… ์ถ”๊ฐ€

- useGroupAccessCode : groupAccessCode์˜ atom ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ํ›…

* [BE] ๋‚ด๊ฐ€ ๋ฐ›์€ ๋ฆฌ๋ทฐ ๋ชฉ๋ก์„ ์ตœ์‹ ์ˆœ์œผ๋กœ ์กฐํšŒํ•œ๋‹ค. (#189)

* fix: ๋‚ ์งœ ์ˆœ ์ •๋ ฌ

* refactor: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ณ€์ˆ˜ ์ œ๊ฑฐ

---------

Co-authored-by: donghoony <[email protected]>

* [BE] ์ดˆ๊ธฐ ๋ฐ์ดํ„ฐ ์„ค์ • (#187)

* feat: ์ดˆ๊ธฐ ๋ฐ์ดํ„ฐ ์„ค์ •

* build: CD ์‹œ local profile ์„ค์ •

---------

Co-authored-by: donghoony <[email protected]>

* [FE] feat: Alert Modal๊ณผ Error Alert Modal ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„ ๋ฐ Button ์ปดํฌ๋„ŒํŠธ ํ™•์žฅ (#165)

* refactor: ๊ณตํ†ต ๋ฒ„ํŠผ ์ปดํฌ๋„ŒํŠธ๊ฐ€ children๊ณผ style์„ ๋ฐ›๋„๋ก ์ˆ˜์ •

* chore: error alert modal์—์„œ ์‚ฌ์šฉํ•  primary ์ƒ‰์ƒ์˜ ๊ฒฝ๊ณ  ์‚ผ๊ฐํ˜• ์ถ”๊ฐ€

* feat: ErrorAlertModal ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„

* feat: AlertModal ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„

* chore: ๋ณ€๊ฒฝ๋œ Button ์ปดํฌ๋„ŒํŠธ์˜ ๊ตฌ์กฐ์— ๋งž๊ฒŒ ์ฝ”๋“œ ์ˆ˜์ •

* fix: AlertModal์ด Esc ๋˜๋Š” background์˜ ํด๋ฆญ์œผ๋กœ ๋‹ซํžˆ์ง€ ์•Š๋„๋ก ์ˆ˜์ •

* chore: AlertModal๊ณผ ErrorAlertModal export

* refactor: Button ์ปดํฌ๋„ŒํŠธ๊ฐ€ type์„ ๋ณ„๋„๋กœ ๋ฐ›๋„๋ก ์ˆ˜์ • ๋ฐ ๊ธฐ์กด์˜ buttonType์„ styleType์œผ๋กœ ๋ณ€๊ฒฝ

* refactor: background ํด๋ฆญ ๋˜๋Š” Esc ํ‚ค๋ฅผ ํ†ตํ•ด ๋ชจ๋‹ฌ์„ ๋‹ซ๋Š” ๊ฒƒ์„ ๋ถ„๋ฆฌ

* refactor: AlertModal์˜ ๋ชจ๋‹ฌ ๋‹ซ๋Š” ์ •์ฑ…์„ props๋กœ ์„ ํƒ ๊ฐ€๋Šฅํ•˜๋„๋ก ์ˆ˜์ •

* refactor: ErrorAlertModal์„ AlertModal์„ ์‚ฌ์šฉํ•ด ๊ตฌํ˜„

* refactor: ๋‹ซ๊ธฐ ๋ฒ„ํŠผ ์ด์™ธ์˜ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ชจ๋‹ฌ์„ ๋‹ซ์„ ์ˆ˜ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€์™€ handler๋ฅผ props๋กœ ์ „๋‹ฌ๋ฐ›๋„๋ก ๋ณ€๊ฒฝ

* refactor: ๋น„์–ด์žˆ๋Š” ์Šคํƒ€์ผ ์ปดํฌ๋„ŒํŠธ ์ œ๊ฑฐ

* [FE] ๋žœ๋”ฉ ํŽ˜์ด์ง€ ํผ๋ธ”๋ฆฌ์‹ฑ ๋ฐ ๋””๋ฐ”์šด์‹ฑ ํ•จ์ˆ˜ ์ถ”๊ฐ€ (#181)

* feat: Input ๊ณตํ†ต ์ปดํฌ๋„ŒํŠธ ์ œ์ž‘

* feat: LandingPage ์ œ์ž‘

* fix: Input์˜ type์„ text๋กœ ์ˆ˜์ •

* feat: debounce ํ•จ์ˆ˜ ์ž‘์„ฑ

* docs: debounce ํ•จ์ˆ˜์— TODO ์ฃผ์„ ๋ฐ TSdoc ์ถ”๊ฐ€ ์™ธ ๊ฐ„๋‹จํ•œ if๋ฌธ ๋ฆฌํŒฉํ† ๋ง

* chore: ์ž˜๋ชป๋œ ํŒŒ์ผ ๊ตฌ์กฐ ๋ฐ ๋””๋ ‰ํ† ๋ฆฌ๋ช… ์ˆ˜์ •

* chore: px์„ rem์œผ๋กœ ์ˆ˜์ •

* refactor: ๋™์  ์Šคํƒ€์ผ๋ง์— css ๋Œ€์‹  styled ์Šคํƒ€์ผ ์ ์šฉ

* refactor: Input ์Šคํƒ€์ผ์„ ๋”์šฑ ์œ ์—ฐํ•˜๊ฒŒ ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก ์ˆ˜์ •, ์Šคํƒ€์ผ ๋ฆฌํ„ฐ๋Ÿด ์ œ๊ฑฐ

* refactor: Input์— ์ ์šฉ๋œ ์ปค์Šคํ…€ ์Šคํƒ€์ผ๋ง์„ $style๋กœ ์ˆ˜์ •

* fix: undefined ๋ฆฌํ„ด์„ null ๋ฆฌํ„ด์œผ๋กœ ์ˆ˜์ •

* refactor: flex-direction์— ๋ณ„๋„์˜ ์ปค์Šคํ…€ ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹  React ๋‚ด์žฅ ํƒ€์ž…์„์‚ฌ์šฉํ•˜๋„๋ก ์ˆ˜์ •

* refactor: Input ์ปดํฌ๋„ŒํŠธ์—์„œ rest props ์ œ๊ฑฐ

* chore: ๋ถˆํ•„์š”ํ•œ import ์ œ๊ฑฐ

* [FE] feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํŽ˜์ด์ง€์— ๋ณ€๊ฒฝ๋œ API ์—ฐ๋™ ํ›„, ๋ฆฌ์•กํŠธ ์ฟผ๋ฆฌ ์ ์šฉ ๋ฐ ๋ฌดํ•œ ์Šคํฌ๋กค ๊ตฌํ˜„ (#192)

* design: ๋ฆฌ๋ทฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์นด๋“œ ๋ฐฐ๊ฒฝ์ƒ‰ ๋ณ€๊ฒฝ ๋ฐ ์ „์ฒด ๊ฐ์‹ธ๋Š” div์— ์•„๋ž˜์ชฝ ์—ฌ๋ฐฑ ์ถ”๊ฐ€

* refactor: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ์ธํ„ฐํŽ˜์ด์Šค ์ถ”๊ฐ€ ๋ฐ ์ˆ˜์ •

- ReviewPreviewList ์ธํ„ฐํŽ˜์ด์Šค ์ถ”๊ฐ€
  - size, lastReviewId, reviews ํ•„๋“œ ์ถ”๊ฐ€
- ReviewPreview ์ธํ„ฐํŽ˜์ด์Šค ์ˆ˜์ •
  - keywords ํ•„๋“œ๋ฅผ Keyword[] ํƒ€์ž…์œผ๋กœ ๋ณ€๊ฒฝ

* chore: ๋‹ซํžŒ ์ž๋ฌผ์‡ ๋กœ ์•„์ด์ฝ˜ ๋ณ€๊ฒฝ

* feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํŽ˜์ด์ง€์—์„œ ๋ฆฌ์•กํŠธ ์ฟผ๋ฆฌ ์ ์šฉ

* refactor: ์›น ์ ‘๊ทผ์„ฑ์„ ์œ„ํ•œ alt, aria-label ์ถ”๊ฐ€ ๋ฐ ์ฝ”๋“œ ์ปจ๋ฒค์…˜์— ๋งž์ถฐ ์ฝ”๋“œ ์ˆ˜์ •

* feat: ๋ฆฌ๋ทฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๋ฆฌ์ŠคํŠธ ํ•ธ๋“ค๋Ÿฌ์— ํŽ˜์ด์ง€๋„ค์ด์…˜ ๋กœ์ง ์ถ”๊ฐ€

- ๊ธฐ์กด์˜ ๋‹จ์ˆœ ๋ฐ˜ํ™˜ ํ•ธ๋“ค๋Ÿฌ์—์„œ ํŽ˜์ด์ง€๋„ค์ด์…˜ ๊ธฐ๋Šฅ์„ ํฌํ•จํ•œ ํ•ธ๋“ค๋Ÿฌ๋กœ ์ˆ˜์ •

* feat: `SideModal` ์ปดํฌ๋„ŒํŠธ์— `closeModal` prop ์ถ”๊ฐ€

* feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํŽ˜์ด์ง€์— ๋ฌดํ•œ ์Šคํฌ๋กค ๊ธฐ๋Šฅ ์ถ”๊ฐ€

* refactor: useReviewPreviewList ํ›… ์ƒ์„ฑํ•˜์—ฌ ๋ฐ์ดํ„ฐ ํ˜ธ์ถœ ๋กœ์ง ๋ถ„๋ฆฌ

* refactor: ๋ถˆํ•„์š”ํ•œ ButtonContainer ์ œ๊ฑฐ

* design: px์„ rem์œผ๋กœ ๋ณ€๊ฒฝ

* refactor: Button ์ปดํฌ๋„ŒํŠธ์— key ์ถ”๊ฐ€

* feat: ๋ฆฌ๋ทฐ์ด, ํ”„๋กœ์ ํŠธ๋ช…์„ ๋ณด์—ฌ์ฃผ๋Š” DescriptionSection ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„

* refactor: ๋ฆฌ๋ทฐ ๋ชฉ๋ก์„ ๋ถˆ๋Ÿฌ์˜ค๋Š” api ๋ณ€๊ฒฝ ์ด์Šˆ๋กœ ์ธํ•ด ์—”๋“œํฌ์ธํŠธ, fetch ํ•จ์ˆ˜ ์ˆ˜์ •

* chore: fragment ์ œ๊ฑฐ

* refactor: api ๋ณ€๊ฒฝ์— ๋”ฐ๋ผ ReviewPreviewList, ReviewPreview ์ธํ„ฐํŽ˜์ด์Šค ์ˆ˜์ •

* refactor: ๋ณ€๊ฒฝ๋œ api์— ๋”ฐ๋ผ props ์ˆ˜์ •

* refactor: reviewerGroup, isPublic ์ œ๊ฑฐ

* refactor: endPoint.gettingReviewList ํ˜ธ์ถœ ์ธ์ž ๋ณ€๊ฒฝ

* refactor: DescriptionSection์—์„œ ReviewInfoSection์œผ๋กœ ์ปดํฌ๋„ŒํŠธ๋ช… ๋ณ€๊ฒฝ

* refactor: useSuspenseQuery ์ ์šฉ ํ›„, ๋ฌดํ•œ์Šคํฌ๋กค ๊ด€๋ จ ์ฝ”๋“œ ์ฃผ์„ ์ฒ˜๋ฆฌ

---------

Co-authored-by: badahertz52 <[email protected]>

* [FE] feat: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํŽ˜์ด์ง€์™€ ์„œ๋ฒ„ ๋ฐ ๋ชจ๋‹ฌ ์—ฐ๋™ (#191)

* chore: ๋ณ€๊ฒฝ๋œ UI ์ ์šฉ

* design: ํ‚ค์›Œ๋“œ ๋ฌธํ•ญ ์•ˆ๋‚ด ๋ฌธ๊ตฌ ์ˆ˜์ •

* feat: Textarea ๊ณตํ†ต ์ปดํฌ๋„ŒํŠธ ๋ผˆ๋Œ€ ๊ตฌํ˜„

* chore: ์ˆ˜์ •๋œ api ์—”๋“œํฌ์ธํŠธ ๋ฐ queryparams ์ ์šฉ

* design: reset.ts ์ถ”๊ฐ€ ์„ค์ •

* chore: ๋ณ€๊ฒฝ๋œ api ๋ฌธ์„œ์— ๋งž๊ฒŒ ํƒ€์ž… ์ˆ˜์ •

* feat: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํŽ˜์ด์ง€์™€ ๋ชจ๋‹ฌ ๋ฐ ์„œ๋ฒ„ ์—ฐ๋™

* chore: ์‚ฌ์ด๋“œ๋ฐ” ๋ฉ”๋‰ด ํด๋ฆญ ์‹œ ์ด๋™ํ•  path ์ˆ˜์ •

* fix: ConfirmModal์—์„œ background ํด๋ฆญ ์‹œ ๋ชจ๋‹ฌ์ด ๋‹ซํžˆ์ง€ ์•Š๋Š” ํ˜„์ƒ ์ˆ˜์ •

* design: AlertModal ๋ฐ ErrorAlertModal ๋””์ž์ธ ์ˆ˜์ •

* chore: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ๋ฐ ์ž‘์„ฑ ์™„๋ฃŒ ํŽ˜์ด์ง€ ๋ผ์šฐํ„ฐ ์ถ”๊ฐ€

* chore: ๋ถˆํ•„์š”ํ•œ ์ฃผ์„ ์ œ๊ฑฐ ๋ฐ ์‚ฌ์ด๋“œ๋ฐ”์—์„œ ๋ฆฌ๋ทฐ ์ž‘์„ฑ ๋ฉ”๋‰ด ์ˆจ๊น€ ์ฒ˜๋ฆฌ

* chore: ๋ฆฌ๋ทฐ ์ œ์ถœ ํŽ˜์ด์ง€ ๋ฒ„ํŠผ ํƒ€์ž… ๋ช…์‹œ

* chore: svg import ์ปจ๋ฒค์…˜์— ๋งž๊ฒŒ ์ˆ˜์ •

* [FE] ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํŽ˜์ด์ง€, ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€์—์„œ ๋กœ๊ทธ์ธ์„ ์—ฐ๋™ (#193)

* design: ๋ฆฌ๋ทฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์นด๋“œ ๋ฐฐ๊ฒฝ์ƒ‰ ๋ณ€๊ฒฝ ๋ฐ ์ „์ฒด ๊ฐ์‹ธ๋Š” div์— ์•„๋ž˜์ชฝ ์—ฌ๋ฐฑ ์ถ”๊ฐ€

* refactor: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ์ธํ„ฐํŽ˜์ด์Šค ์ถ”๊ฐ€ ๋ฐ ์ˆ˜์ •

- ReviewPreviewList ์ธํ„ฐํŽ˜์ด์Šค ์ถ”๊ฐ€
  - size, lastReviewId, reviews ํ•„๋“œ ์ถ”๊ฐ€
- ReviewPreview ์ธํ„ฐํŽ˜์ด์Šค ์ˆ˜์ •
  - keywords ํ•„๋“œ๋ฅผ Keyword[] ํƒ€์ž…์œผ๋กœ ๋ณ€๊ฒฝ

* chore: ๋‹ซํžŒ ์ž๋ฌผ์‡ ๋กœ ์•„์ด์ฝ˜ ๋ณ€๊ฒฝ

* feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํŽ˜์ด์ง€์—์„œ ๋ฆฌ์•กํŠธ ์ฟผ๋ฆฌ ์ ์šฉ

* refactor: ์›น ์ ‘๊ทผ์„ฑ์„ ์œ„ํ•œ alt, aria-label ์ถ”๊ฐ€ ๋ฐ ์ฝ”๋“œ ์ปจ๋ฒค์…˜์— ๋งž์ถฐ ์ฝ”๋“œ ์ˆ˜์ •

* feat: ๋ฆฌ๋ทฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๋ฆฌ์ŠคํŠธ ํ•ธ๋“ค๋Ÿฌ์— ํŽ˜์ด์ง€๋„ค์ด์…˜ ๋กœ์ง ์ถ”๊ฐ€

- ๊ธฐ์กด์˜ ๋‹จ์ˆœ ๋ฐ˜ํ™˜ ํ•ธ๋“ค๋Ÿฌ์—์„œ ํŽ˜์ด์ง€๋„ค์ด์…˜ ๊ธฐ๋Šฅ์„ ํฌํ•จํ•œ ํ•ธ๋“ค๋Ÿฌ๋กœ ์ˆ˜์ •

* feat: `SideModal` ์ปดํฌ๋„ŒํŠธ์— `closeModal` prop ์ถ”๊ฐ€

* feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํŽ˜์ด์ง€์— ๋ฌดํ•œ ์Šคํฌ๋กค ๊ธฐ๋Šฅ ์ถ”๊ฐ€

* refactor: useReviewPreviewList ํ›… ์ƒ์„ฑํ•˜์—ฌ ๋ฐ์ดํ„ฐ ํ˜ธ์ถœ ๋กœ์ง ๋ถ„๋ฆฌ

* refactor: ๋ถˆํ•„์š”ํ•œ ButtonContainer ์ œ๊ฑฐ

* design: px์„ rem์œผ๋กœ ๋ณ€๊ฒฝ

* refactor: Button ์ปดํฌ๋„ŒํŠธ์— key ์ถ”๊ฐ€

* feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก,๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€ api ํ•ธ๋“ค๋Ÿฌ์—์„œ groupAccessCode๋ฅผ header์— ์ถ”๊ฐ€

* feat: DetailedReviewPage ์—์„œ groupAccessCode ์ƒํƒœ ์ ์šฉ

* feat: LoginRedirectModal ์ƒ์„ฑ

* refactor: ErrorSection ๋ฆฌํŒฉํ† ๋ง

* feat: ๋ฆฌ๋ทฐ์ด, ํ”„๋กœ์ ํŠธ๋ช…์„ ๋ณด์—ฌ์ฃผ๋Š” DescriptionSection ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„

* refactor: ๋ฆฌ๋ทฐ ๋ชฉ๋ก์„ ๋ถˆ๋Ÿฌ์˜ค๋Š” api ๋ณ€๊ฒฝ ์ด์Šˆ๋กœ ์ธํ•ด ์—”๋“œํฌ์ธํŠธ, fetch ํ•จ์ˆ˜ ์ˆ˜์ •

* feat: ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€์— groupAccessCode ์ƒํƒœ๋ฅผ ์ ์šฉ

- ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€์— groupAccessCode ์ƒํƒœ๊ฐ’์ด ์žˆ์œผ๋ฉด api์š”์ฒญ์„ ํ•˜๊ณ  ์—†์œผ๋ฉด LoginRedirectModal์„ ๋„์–ด์„œ ๋กœ๊ทธ์ธ ์œ ๋„ํ•˜๋Š” ๊ธฐ๋Šฅ ์ถ”๊ฐ€
- DetailedPage/index.tsx์— ์žˆ๋˜ ๋‚ด์šฉ์„ DetailedReivewPageContents๋กœ ์ด๋™
-  DetailedPage/index.tsx์—์„œ ErrorSuspenseContainer ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ˆ˜์ •

* chore: fragment ์ œ๊ฑฐ

* refactor: api ๋ณ€๊ฒฝ์— ๋”ฐ๋ผ ReviewPreviewList, ReviewPreview ์ธํ„ฐํŽ˜์ด์Šค ์ˆ˜์ •

* fix: ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€ keyword ํƒ€์ž… ๋ณ€๊ฒฝ์— ๋”ฐ๋ฅธ ์ˆ˜์ •

* refactor: ๋ณ€๊ฒฝ๋œ api์— ๋”ฐ๋ผ props ์ˆ˜์ •

* refactor: reviewerGroup, isPublic ์ œ๊ฑฐ

* feat: ErrorFallback ์˜ ํ™ˆ ์ด๋™ ๊ฒฝ๋กœ ๋ณ€๊ฒฝ

* refactor: endPoint.gettingReviewList ํ˜ธ์ถœ ์ธ์ž ๋ณ€๊ฒฝ

* refactor: DetailedReviewPage์—์„œ groupAccessCode ๊ฐ€์ ธ์˜ค๋Š” ๋ฐฉ์‹ ๋ณ€๊ฒฝ

- useRecoilValue๊ฐ€ ์•„๋‹Œ useGroupAccessCode์—์„œ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์œผ๋กœ ๋ณ€๊ฒฝ

* refactor: DescriptionSection์—์„œ ReviewInfoSection์œผ๋กœ ์ปดํฌ๋„ŒํŠธ๋ช… ๋ณ€๊ฒฝ

* refactor: ErrorPage์—์„œ Home ์ด๋™ ๋ฒ„ํŠผ์„ ์œ ๋„ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝ

- route์˜ค๋ฅ˜ ๋ฉ”์„ธ์ง€์™€ api์˜ค๋ฅ˜ ๋ฉ”์„ธ์ง€๋ฅผ errorMessage ํŒŒ์ผ์—์„œ ๊ด€๋ฆฌํ•˜๋„๋ก ์ˆ˜์ •
- ErrorPage์—์„œ errorMessage๊ฐ€ ROUTE_ERROR_MESSAGE์ด๋ฉด ํ™ˆ ๋ฒ„ํŠผ์ด ํ™”๋ฉด์ƒ์—์„œ ๋จผ์ € ๋‚˜์˜ค๋„๋ก ์ˆ˜์ •
- ์ƒ‰์ƒ๋ณ„ ํ™ˆ,refresh ์•„์ด์ฝ˜ SVG ์ถ”๊ฐ€

* refactor: useSuspenseQuery ์ ์šฉ ํ›„, ๋ฌดํ•œ์Šคํฌ๋กค ๊ด€๋ จ ์ฝ”๋“œ ์ฃผ์„ ์ฒ˜๋ฆฌ

* feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํŽ˜์ด์ง€ ๋ชฉ ์„œ๋ฒ„ ํ•ธ๋“ค๋Ÿฌ ๋ฐ ๋ชฉ๋ฐ์ดํ„ฐ ์ˆ˜์ •

* feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํŽ˜์ด์ง€์—  groupAccessCode ์ „์—ญ ์ƒํƒœ ์ ์šฉ

* refactor: ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ ์‚ญ์ œ

* chore: ์˜คํƒ€ ์ˆ˜์ •

---------

Co-authored-by: soosoo22 <[email protected]>

* [FE] feat: ๋žœ๋”ฉ ํŽ˜์ด์ง€ API ์—ฐ๋™ (#196)

* feat: ๊ทธ๋ฃน ์ƒ์„ฑ์„ ์œ„ํ•œ ์—”๋“œํฌ์ธํŠธ ์ƒ์„ฑ ๋ฐ ๋ฆฌ๋ทฐ ๋ชฉ๋ก ์—”๋“œํฌ์ธํŠธ, api ํ˜ธ์ถœ ํ•จ์ˆ˜ ์ˆ˜์ •

* fix: CSSProperties ๋Œ€์‹  ์ปค์Šคํ…€ ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜๋˜ ์ธํ„ฐํŽ˜์ด์Šค ์ˆ˜์ •

* feat: ReviewAccessForm์— ๋ชจ๋‹ฌ ๋ฐ API ์—ฐ๊ฒฐ

* fix: ๋ˆ„๋ฝ๋๋˜ CopyIcon ํŒŒ์ผ ์—…๋กœ๋“œ

* feat: ํ™•์ธ ์ฝ”๋“œ ์ž…๋ ฅ API ์—ฐ๋™

* feat: ์™„์ „ํ•œ ๋ฆฌ๋ทฐ ์ž‘์„ฑ URL์„ ๋ฆฌํ„ดํ•˜๋Š” ํ•จ์ˆ˜ ์ž‘์„ฑ

* [FE] fix: ๋ˆ„๋ฝ๋๋˜ ๋ฒ„ํŠผ ๋ฆฌํŒฉํ† ๋ง ๋ฐ ์—”๋“œํฌ์ธํŠธ ๋ณต๊ตฌ (#199)

* fix: ์ถฉ๋Œ ํ•ด๊ฒฐ ๊ณผ์ •์—์„œ ๋ˆ„๋ฝ๋๋˜ ์—”๋“œํฌ์ธํŠธ ๋ณต๊ตฌ

* fix: ๋ฒ„ํŠผ ๋ฆฌํŒฉํ† ๋ง ๋ฐ˜์˜

* feat: textarea์— ์ตœ์†Œ ์ž…๋ ฅ ๊ธ€์ž ์ˆ˜๋ฅผ ๋งŒ์กฑํ•˜์ง€ ๋ชปํ•œ ๊ฒฝ์šฐ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ ํ‘œ์‹œ ๊ธฐ๋Šฅ ๊ตฌํ˜„ (#200)

* feat: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ์™„๋ฃŒ ํŽ˜์ด์ง€์—์„œ ํ™ˆ ๋ฒ„ํŠผ ์ถ”๊ฐ€ (#201)

* docs: ๋ฆฌ๋ทฐ๋ฏธ ์†Œ๊ฐœ๊ธ€ ์ž‘์„ฑ (#203)

* [BE] refactor: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฉ”์„œ๋“œ ์ œ๊ฑฐ, ์ปจ๋ฒค์…˜ ๋ฐ ์ž‘์€ ๋ฆฌํŒฉํ† ๋ง (#206)

* refactor: date๋ฅผ review๊ฐ€ ์ œ๊ณตํ•˜๋„๋ก ์ˆ˜์ •

* style: ์ปจ๋ฒค์…˜ ์ ์šฉ

* refactor: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฉ”์„œ๋“œ ์ œ๊ฑฐ

* refactor: ๋ฉ”์„œ๋“œ๋ช… ํ†ต์ผ

* style: ๋ถˆํ•„์š”ํ•œ ๊ฐœํ–‰ ์ œ๊ฑฐ

* [FE] jest ์‚ฌ์šฉ ์‹œ nodeํ™˜๊ฒฝ ์† msw ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ์™€ ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์˜ค๋ฅ˜  ํ•ด๊ฒฐ (#215)

* ci: dependencies์—์„œ jest ์‚ญ์ œ ๋ฐ ts-jest ์„ค์น˜

* ci: jest์—์„œ ์ ˆ๋Œ€ ๊ฒฝ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก  jest.config.js ์ถ”๊ฐ€

* chore: eslint์ ์šฉ ์ œ์™ธ ํŒŒ์ผ์— jest.config.js, tsconfig.json ์ถ”๊ฐ€

* ci: jest์˜ testEnvioronment๋ฅผ jsdom์œผ๋กœ ์„ค์ •

* fix: jest์—์„œ msw ver2๋ฅผ ๋ชฉ์„œ๋ฒ„๋กœ ์‚ฌ์šฉ ์‹œ ์ƒ๊ธฐ๋Š” ์˜ค๋ฅ˜ ์ˆ˜์ •

1. msw/node ๋ฅผ ์ฝ์ง€ ๋ชปํ•จ
- jest.config.js์˜ testEnvironment ๋นˆ๋ฌธ์ž์—ด

2. ReferentError: TextEnCoder is not defined
- ํ•ด๊ฒฐ : jest.polyfills.js ์ถ”๊ฐ€ ๋ฐ undici ์„ค์น˜

3. ReferenceError: ReadableStream is not defined
- ํ•ด๊ฒฐ : undici ๋‹ค์šด ๊ทธ๋ ˆ์ด๋“œ
undici": "^6.19.5", -> "^5.0.0"

* ci : jest์—์„œ env ํŒŒ์ผ ์ฝ์„ ์ˆ˜ ์žˆ๋„๋ก dotenv ์„ค์น˜ ๋ฐ jest์— ์ ์šฉ

* [FE] ๊ฐœ๋ฐœํ™˜๊ฒฝ๊ณผ ๋นŒ๋“œํ™˜๊ฒฝ์— ๋”ฐ๋ผ msw ์‹คํ–‰ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•˜๋„๋ก msw ์‹คํ–‰ ์กฐ๊ฑด๋ฌธ ๊ฐœ์„   (#221)

* ci: ๋นŒ๋“œ ํŒŒ์ผ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” http-server ํŒจํ‚ค์ง€ ์„ค์น˜ ๋ฐ ์‹คํ–‰ ๋ช…๋ น์–ด ์ถ”๊ฐ€

* fix:๊ฐœ๋ฐœ ํ™˜๊ฒฝ๊ณผ ๋นŒ๋“œ/๋ฐฐํฌ ํ™˜๊ฒฝ์„ ๊ตฌ๋ถ„ํ•ด ๋ชฉ ์„œ๋ฒ„๋ฅผ ์‹คํ–‰ํ•˜๋„๋ก ์กฐ๊ฑด๋ฌธ ๊ฐœ์„ 

* fix: ๋จธ์ง€ ์ถฉ๋Œ ์‹œ yarn.lock ์‚ญ์ œํ•œ ๊ฑฐ ๋ณต๊ตฌ

* [FE] ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€ query ํ›… ๋ถ„๋ฆฌ ๋ฐ HTTP ์š”์ฒญ ํ…Œ์ŠคํŠธ ์ง„ํ–‰  (#216)

* refactor: DetailedPage/index.tsx ๋ฆฌํŒฉํ† ๋ง

- early return๋ฅผ ์‚ฌ์šฉํ•ด ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์„ ๋†’์ž„

* feat: useGetDetailedReview ํ›… ์ƒ์„ฑ ๋ฐ DetailedReviewPageContents์— ์ ์šฉ

* feat: useSearchParamAndQuery ํ›… ์ƒ์„ฑ ๋ฐ DetailedPageContent์— ์ ์šฉ

* refactor: ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€์—์„œ id๋ผ๊ณ  ์‚ฌ์šฉํ–ˆ๋˜ key๊ฐ’, params์˜ key๋ฅผ reviewId๋กœ ๋ณ€๊ฒฝ

- DetailedReview์˜ router param์„ id์—์„œ reviewId๋กœ ๋ณ€๊ฒฝ

* ci: dependencies์—์„œ jest ์‚ญ์ œ ๋ฐ ts-jest ์„ค์น˜

* ci: jest์—์„œ ์ ˆ๋Œ€ ๊ฒฝ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก  jest.config.js ์ถ”๊ฐ€

* chore: eslint์ ์šฉ ์ œ์™ธ ํŒŒ์ผ์— jest.config.js, tsconfig.json ์ถ”๊ฐ€

* ci: jest์˜ testEnvioronment๋ฅผ jsdom์œผ๋กœ ์„ค์ •

* refactor: useGetDetailedReview์—์„œ query ๊ฒฐ๊ณผ๋ฅผ ๋ชจ๋‘ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝ

* fix: jest์—์„œ msw ver2๋ฅผ ๋ชฉ์„œ๋ฒ„๋กœ ์‚ฌ์šฉ ์‹œ ์ƒ๊ธฐ๋Š” ์˜ค๋ฅ˜ ์ˆ˜์ •

1. msw/node ๋ฅผ ์ฝ์ง€ ๋ชปํ•จ
- jest.config.js์˜ testEnvironment ๋นˆ๋ฌธ์ž์—ด

2. ReferentError: TextEnCoder is not defined
- ํ•ด๊ฒฐ : jest.polyfills.js ์ถ”๊ฐ€ ๋ฐ undici ์„ค์น˜

3. ReferenceError: ReadableStream is not defined
- ํ•ด๊ฒฐ : undici ๋‹ค์šด ๊ทธ๋ ˆ์ด๋“œ
undici": "^6.19.5", -> "^5.0.0"

* ci : jest์—์„œ env ํŒŒ์ผ ์ฝ์„ ์ˆ˜ ์žˆ๋„๋ก dotenv ์„ค์น˜ ๋ฐ jest์— ์ ์šฉ

* fix: mock ํ•ธ๋“ค๋Ÿฌ์ธ getDetailedReview ์—์„œ ์ค‘๋ณต๋œ ์ฟผ๋ฆฌ ๋งค๊ฐœ ๋ณ€์ˆ˜ ์‚ฌ์šฉ ์ˆ˜์ •

- ์˜ค๋ฅ˜ ์ƒํ™ฉ:  jest์—์„œ msw ์‚ฌ์šฉ ์‹œ, get์˜ url์— ํŒŒ๋ผ๋ฏธํ„ฐ ์‚ฌ์šฉ ์‹œ ์ค‘๋ณต๋œ ์ฟผ๋ฆฌ ๋งค๊ฐœ ๋ณ€์ˆ˜ ์˜ค๋ฅ˜๊ฐ€ ๋‚จ
- ์˜ค๋ฅ˜ ๋ฉ”์„ธ์ง€ ::Found a redundant usage of query parameters in the request handler
- ํ•ด๊ฒฐ:  ๋ฆฌ๋ทฐ ์ƒ์„ธ๋ณด๊ธฐ ํŽ˜์ด์ง€์˜ reviews๊นŒ์ง€์˜ url ์ƒ์ˆ˜๋ฅผ ๋งŒ๋“ค๊ณ , get์—์„œ๋Š” ์ด ์ƒ์ˆ˜๋ฅผ  ํ™œ์šฉํ•œ ์ •๊ทœํ‘œํ˜„์‹์œผ๋กœ ๋ฆฌ๋ทฐ ์ƒ์„ธ๋ณด๊ธฐ ํŽ˜์ด์ง€๋กœ ์˜ค๋Š” ๋ชจ๋“  ์š”์ฒญ์„ ๊ฐ€๋กœ์ฑŒ ์ˆ˜ ์žˆ๋„๋ก  ํ•จ

* refactor: getWrongDetailedReview ๋ชฉ์„œ๋ฒ„ ํ•ธ๋“ค๋Ÿฌ ๋ฐ ๊ด€๋ จ ์ƒ์ˆ˜ ์‚ญ์ œ

- getDetailedReview์—์„œ request๋ฅผ ๋ถ„์„ํ•ด http์˜ค๋ฅ˜ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•จ

* feat: queryClientWrapper ์ƒ์„ฑ

- queryClientWrapper : msw๋ฅผ ์‚ฌ์šฉํ•œ jest ํ…Œ์ŠคํŠธ์— queryWrapper๋กœ ์‚ฌ์šฉ

* test:๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€ api ์š”์ฒญ ์„ฑ๊ณต์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

* fix: groupAccessCodeAtom์˜ ๊ธฐ๋ณธ๊ฐ’ ์›๋ž˜๋Œ€๋กœ ๋ณต๊ตฌ

* chore:queryClientWrapper ๋„ค์ด๋ฐ ํ‘œ๊ธฐ๋ฒ•์„  ํŒŒ์Šค์นผ ์ผ€์ด์Šค๋กœ ๋ณ€๊ฒฝ

* fix: ๋จธ์ง€ ์ถฉ๋Œ ๋ฐฉ์ง€๋ฅผ ์œ„ํ•ด yarn.lock ์‚ญ์ œ

* fix:  ๋จธ์ง€ ์‹œ yarn.lock ์ถฉ๋Œ ํ•ด๊ฒฐ

* [FE] test: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํŽ˜์ด์ง€์— API ์—ฐ๋™ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€ ๋ฐ ๋ฆฌํŒฉํ† ๋ง (#217)

* chore: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํŽ˜์ด์ง€ ๊ด€๋ จ ์ปดํฌ๋„ŒํŠธ ๋ฐ ์ธํ„ฐํŽ˜์ด์Šค, ํŒŒ์ผ ์ด๋ฆ„ ๋ณ€๊ฒฝ

* refactor: api ์—”๋“œํฌ์ธํŠธ ์ƒ์ˆ˜ ์ ์šฉ

* refactor: useGetReviewList ํ›…์œผ๋กœ ๋ถ„๋ฆฌ

* test: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํŽ˜์ด์ง€ api ์—ฐ๋™ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

* chore: msw ๋ชจํ‚น ์ฝ”๋“œ ์ œ๊ฑฐ

* chore: ๊ฒฝ๋กœ index ์ œ๊ฑฐ

* fix: ์ค‘๋ณต๋œ import ๋ฐ ๋ถˆํ•„์š”ํ•œ ํ•ธ๋“ค๋Ÿฌ ์ œ๊ฑฐ

* chore: ์—”๋“œํฌ์ธํŠธ ์ƒ์ˆ˜ ์ œ๊ฑฐ

* [FE] refactor: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํŽ˜์ด์ง€ ๋ฆฌํŒฉํ† ๋ง (#219)

* refactor: ๊ฐ ๋ชจ๋‹ฌ๋ณ„๋กœ ์ƒํƒœ์™€ ๋™์ž‘์„ ๊ด€๋ฆฌํ•˜๋Š” ํ›… ๋ถ„๋ฆฌ

* refactor: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํผ์˜ ๋กœ์ง์„ ํ›…์œผ๋กœ ๋ถ„๋ฆฌ

* refactor: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํŽ˜์ด์ง€์— ๋ถ„๋ฆฌํ•œ ํ›… ์ ์šฉ

* refactor: URL์—์„œ reviewRequestCode๋ฅผ ์ถ”์ถœํ•˜๋Š” ๋กœ์ง์„ ํ›…์œผ๋กœ ๋ถ„๋ฆฌ

* chore: ๋ถˆํ•„์š”ํ•œ ํ…Œ์ŠคํŠธ์šฉ ์ฝ”๋“œ ์ œ๊ฑฐ

* chore: ErrorModal์„ ๋‹ซ์„ ๋•Œ errorMessage ์ƒํƒœ๋„ ์ดˆ๊ธฐ๊ฐ’์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋„๋ก ์ˆ˜์ •

* [BE] feat: ํ—ค๋” ์กด์žฌ ์—ฌ๋ถ€ ๊ฒ€์ฆ (#207)

* fix: ์ธํ„ฐํŽ˜์ด์Šค์™€ ๊ตฌํ˜„์ฒด ์–ด๋…ธํ…Œ์ด์…˜ ์ผ์น˜

* feat: ํ—ค๋” ๊ฒ€์‚ฌ ์–ด๋…ธํ…Œ์ด์…˜

* feat: ํ—ค๋” ๋ฐธ๋ฆฌ๋ฐ์ดํ„ฐ

* feat: ์ปจํŠธ๋กค๋Ÿฌ์— ํ—ค๋” ๊ฒ€์‚ฌ

* feat: ํ—ค๋” ๊ฒ€์ฆ ๋ฉ”์‹œ์ง€ ํด๋ผ์ด์–ธํŠธ์— ์ „๋‹ฌ

* fix: ๋ˆ„๋ฝ๋œ `@Valid` ์–ด๋…ธํ…Œ์ด์…˜ ์ถ”๊ฐ€

* refactor: ์š”์ฒญ์ด null์ธ ๊ฒฝ์šฐ ํ•ธ๋“ค๋ง

* chore: ํ…Œ์ŠคํŠธ ์ด๋ฆ„ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ๋ณ€๊ฒฝ

* chore: ์†Œ๋ฌธ์ž ์ปจ๋ฒค์…˜

* feat: ArgumentResolver๋ฅผ ํ™œ์šฉํ•œ ํ—ค๋” ๊ฒ€์ฆ

* feat: ๊ณต์šฉ ํŒจํ‚ค์ง€๋กœ ์ด๋™ ๋ฐ ๋ฒ”์šฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ˆ˜์ •

* chore: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” import ์ œ๊ฑฐ

* feat: ArgumentResolver ์ ์šฉ, Validator ์‚ญ์ œ

* chore: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ปค์Šคํ…€ ์˜ˆ์™ธ ์›๋ณต

* refactor: ํ—ค๋” ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ๋ฉ”์‹œ์ง€ ์ˆ˜์ •

* chore: ๋ถˆํ•„์š”ํ•œ `@Valid` ์–ด๋…ธํ…Œ์ด์…˜ ์‚ญ์ œ

* refactor: ๋ณ€์ˆ˜ ์ถ”์ถœ

Co-authored-by: Yeongseo Na <[email protected]>

* fix: ์ปดํŒŒ์ผ ์—๋Ÿฌ ํ•ด๊ฒฐ

---------

Co-authored-by: Yeongseo Na <[email protected]>

* ci: index.html์— ๊ตฌ๊ธ€ ์• ๋„๋ฆฌํ‹ฑ์Šค ์ ์šฉ (#226)

* [FE] ci: sentry ์ดˆ๊ธฐ ์„ค์ • (#223)

* ci: sentry ์ดˆ๊ธฐ ์„ค์ •

* chore: gitignore์— env.sentry-build-plugin ์ถ”๊ฐ€

* ci: sentry ์ ์šฉ ํ”„๋กœ์ ํŠธ๋ฅผ woowacoure-review-me๋กœ ๋ณ€๊ฒฝ, ๋กœ์ปฌ ํ™˜๊ฒฝ ์ถ”์ ํ•˜๋„๋ก ๋ณ€๊ฒฝ

* ci: sentry ์ ์šฉ ํ™˜๊ฒฝ์„ ๋ฐฐํฌ ํ™˜๊ฒฝ์œผ๋กœ ๋‹ค์‹œ ๋ณ€๊ฒฝ

* ci: sentry์—์„œ replay ๊ด€๋ จ ์„ค์ • ์‚ญ์ œ

---------

Co-authored-by: badahertz52 <[email protected]>

* [FE] refactor: LandingPage์— ๋ฆฌ์•กํŠธ ์ฟผ๋ฆฌ ์ ์šฉ ๋ฐ ๋ฆฌํŒฉํ† ๋ง (#218)

* chore: LandingPage์˜ styles ํŒŒ์ผ ๋ถ„๋ฆฌ

* fix: POST ์š”์ฒญ์„ ํ•˜๋Š” ํ•จ์ˆ˜์˜ ์ด๋ฆ„์„ post~๋กœ ์ˆ˜์ •

* feat: ๊ทธ๋ฃน ๋ฐ์ดํ„ฐ ์ƒ์„ฑ ์š”์ฒญ์— ๋Œ€ํ•œ MSW ํ•ธ๋“ค๋Ÿฌ ์ถ”๊ฐ€

* refactor: ๋ชจํ‚น ๋ฐ์ดํ„ฐ ๊ฐ’์„ ๋” ์ง๊ด€์ ์œผ๋กœ ์ˆ˜์ •

* refactor: LandingPage๋ฅผ ErrorSuspenseContainer๊ฐ€ ๊ฐ์‹ธ๋„๋ก ์ˆ˜์ •

* refactor: URL์„ ์–ป์–ด์˜ค๋Š” API์— react-query ์ ์šฉ ๋ฐ API ํ˜ธ์ถœ ํ•จ์ˆ˜ ์ด๋ฆ„ ์ˆ˜์ •

* chore: LandingPage ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ๋“ค์˜ index ํŒŒ์ผ ์ถ”๊ฐ€ ๋ฐ ์ ์šฉ

* refactor: groupAccessCode ๊ด€๋ จ msw ํ•ธ๋“ค๋Ÿฌ ์ถ”๊ฐ€ ๋ฐ ์—๋Ÿฌ ์ƒํƒœ(์—†๋Š” ์ฝ”๋“œ ์ž…๋ ฅ, ์„œ๋ฒ„ ์—๋Ÿฌ)์— ๋”ฐ๋ฅธ ์—๋Ÿฌ ๋ฉ”์„ธ์ง€๋ฅผ ์ถœ๋ ฅํ•˜๋„๋ก ์ˆ˜์ •

* refactor: groupAccessCode์— ์•ŒํŒŒ๋ฒณ ๋Œ€์†Œ๋ฌธ์ž์™€ ์ˆซ์ž๋งŒ ์˜ฌ ์ˆ˜ ์žˆ๋„๋ก ์ˆ˜์ •

* refactor: LandingPage์—์„œ ErrorSuspenseContainer๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ๋Œ€์‹  URLGeneratorForm๋งŒ์„ ๊ฐ์‹ธ๋„๋ก ์ˆ˜์ •

* refactor: Input ์ปดํฌ๋„ŒํŠธ์˜ onChange ์ด๋ฒคํŠธ ํƒ€์ž… ์ˆ˜์ •

* refactor: Input ์ปดํฌ๋„ŒํŠธ์— name ์†์„ฑ ์ถ”๊ฐ€

* refactor: ์ˆ˜์ •๋œ ๊ฒฝ๋กœ ๋ฐ˜์˜

* refactor: usePostDataForUrl ์ฟผ๋ฆฌ์—์„œ mutation์„ ๋ฆฌํ„ดํ•˜๋„๋ก ์ˆ˜์ •

* refactor: URL์„ ์„ฑ๊ณต์ ์œผ๋กœ ์ƒ์„ฑํ•œ ์ดํ›„ Input์„ ๋ฆฌ์…‹ํ•˜๋Š” ํ•จ์ˆ˜ ์ถ”๊ฐ€

* chore: NOTE ์ฃผ์„ ์ถ”๊ฐ€

* refactor: getIsValidGroupAccessCodeApi์—์„œ 400 ์™ธ์˜ ์—๋Ÿฌ ์ฒ˜๋ฆฌ๋ฅผ ๊ธฐ์กด์˜ createApiErrorMessage๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์ˆ˜์ •

* chore: ๋ˆ„๋ฝ๋๋˜ -Api suffix ๋ฐ˜์˜

* [BE] Actuator ์ ์šฉ๊ณผ logback ์„ค์ • (#228)

* build: actuator ์˜์กด์„ฑ ์ถ”๊ฐ€

* feat: ๋กœ๊ทธ๋ฐฑ ์„ค์ •

* feat: submodule ์ ์šฉ

- actuator ์„ค์ •์„ ์„œ๋ธŒ ๋ชจ๋“ˆ์— ์ €์žฅ

* style: ๊ฐœํ–‰ ๋ฐ ์ฃผ์„ ์ œ๊ฑฐ

* test: logback ์„ค์ • ์ถ”๊ฐ€

* [FE] CD test (#233)

* ci: sentry ์ดˆ๊ธฐ ์„ค์ •

* chore: ์„œ๋น„์Šค ํƒ€์ดํ‹€ ๋Œ€๋ฌธ์ž๋กœ ๋ณ€๊ฒฝ

* chore: merge

* [BE] ํ”„๋กœํŒŒ์ผ ๋ถ„๋ฆฌ, CD ์Šคํฌ๋ฆฝํŠธ ์ˆ˜์ • (#235)

* feat: ํ”„๋กœํŒŒ์ผ ๋ถ„๋ฆฌ

* feat: ํ”„๋กœํŒŒ์ผ ๋ถ„๋ฆฌ

* cd: ํ”„๋กœํŒŒ์ผ ๋ถ„๋ฆฌ cd ์Šคํฌ๋ฆฝํŠธ ์ˆ˜์ •

* fix: CD ์Šคํฌ๋ฆฝํŠธ ์˜คํƒ€ ์ˆ˜์ • (#236)

* [FE] CD test 2 (#237)

* ci: sentry ์ดˆ๊ธฐ ์„ค์ •

* chore: ์„œ๋น„์Šค ํƒ€์ดํ‹€ ๋Œ€๋ฌธ์ž๋กœ ๋ณ€๊ฒฝ

* chore: merge

* fix: sentry ์žฌ์„ค์ •

* fix: sentry ์„ค์ • ๋ณต๊ตฌ

* fix: cd ์Šคํฌ๋ฆฝํŠธ ์˜คํƒ€ ์ˆ˜์ • (#238)

* [FE] CD TEST 3 (#239)

* ci: sentry ์ดˆ๊ธฐ ์„ค์ •

* chore: ์„œ๋น„์Šค ํƒ€์ดํ‹€ ๋Œ€๋ฌธ์ž๋กœ ๋ณ€๊ฒฝ

* chore: merge

* fix: sentry ์žฌ์„ค์ •

* fix: sentry ์„ค์ • ๋ณต๊ตฌ

* chore: ์„œ๋น„์Šค ํƒ€์ดํ‹€ ๋ณ€๊ฒฝ

* [BE] build: Micrometer ์˜์กด์„ฑ ์ถ”๊ฐ€ (#244)

* build: ๋งˆ์ดํฌ๋กœ๋ฏธํ„ฐ ์˜์กด์„ฑ ์ถ”๊ฐ€

Co-authored-by: hyeonjilee <[email protected]>
Co-authored-by: nayonsoso <[email protected]>

* chore: ์„œ๋ธŒ๋ชจ๋“ˆ ์—…๋ฐ์ดํŠธ

Co-authored-by: hyeonjilee <[email protected]>
Co-authored-by: nayonsoso <[email protected]>

---------

Co-authored-by: hyeonjilee <[email protected]>
Co-authored-by: nayonsoso <[email protected]>

* [FE] feat: ๊ณตํ†ต ์ปดํฌ๋„ŒํŠธ์ธ ์ฒดํฌ๋ฐ•์Šค์™€ ์ฒดํฌ๋ฐ•์Šค ์•„์ดํ…œ ์ œ์ž‘ (#240)

* feat: ๊ณตํ†ต ์ฒดํฌ๋ฐ•์Šค ์ปดํฌ๋„ŒํŠธ ์ž‘์„ฑ

* feat: ์ฒดํฌ๋ฐ•์Šค์— ๋ ˆ์ด๋ธ”์„ ๋‹ฌ ์ˆ˜ ์žˆ๋Š” CheckboxItem ์ปดํฌ๋„ŒํŠธ ์ž‘์„ฑ

* fix: style์„ ์ž˜๋ชป ์ „๋‹ฌํ•˜๋˜ ๋ฌธ์ œ ํ•ด๊ฒฐ

* [BE] fix: CD ์Šคํฌ๋ฆฝํŠธ ์ˆ˜์ • (#246)

* fix: CD ์Šคํฌ๋ฆฝํŠธ ์ˆ˜์ •

* chore: ์ €์žฅ ๋ฐ์ดํ„ฐ dev์—์„œ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ˆ˜์ •

* [FE] refactor: LandingPage ๊ฒฝ๋กœ ๋ณ€๊ฒฝ (#249)

* refactor: LandingPage์˜ ๊ฒฝ๋กœ ๋ณ€๊ฒฝ

* refactor: App ์—์„œ ์‚ฌ์ด๋“œ๋ฐ” ์ฃผ์„ ์ฒ˜๋ฆฌ

* [BE] Swagger API ๋ฌธ์„œ ์—…๋ฐ์ดํŠธ (#254)

* docs: ๋ฆฌ๋ทฐ api ๋ฌธ์„œ๋ฅผ ์œ„ํ•œ swagger ์–ด๋…ธํ…Œ์ด์…˜ ์ถ”๊ฐ€

* refactor: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” dto ์‚ญ์ œ

* docs: api ๋ฌธ์„œ์— ์ตœ์†Œ ๋ฐ ์ตœ๋Œ€ ์„ค์ • ์•ˆ๋‚ด ์ถ”๊ฐ€

* docs: ๋ฆฌ๋ทฐ ๊ทธ๋ฃน api๋ฅผ ์œ„ํ•œ swagger ์–ด๋…ธํ…Œ์ด์…˜ ์ถ”๊ฐ€

* refactor: Spring์—์„œ ์ œ๊ณตํ•˜๋Š” APPLICATION_JSON_VALUE ์‚ฌ์šฉ

* [BE] feat: ์˜ˆ์™ธ์— ๋Œ€ํ•œ ๋กœ๊ทธ ์ž‘์„ฑ (#255)

* feat: Controller advice ์— ๋กœ๊น… ์ถ”๊ฐ€

* refactor: ์Šคํƒ ํŠธ๋ ˆ์ด์Šค ๋กœ๊น… ์ถ”๊ฐ€

* feat: ๋ฆฌ๋ทฐ๊ทธ๋ฃน ์ƒ์„ฑ์‹œ ๊ธธ์ด ๊ฒ€์ฆ ๋กœ๊น… ์ถ”๊ฐ€

* feat: ๋‹ต๋ณ€ ๊ธธ์ด ๊ฒ€์ฆ ๋กœ๊น… ์ถ”๊ฐ€

* feat: ๋ฆฌ๋ทฐ ๊ทธ๋ฃน ์ฝ”๋“œ ๊ฒ€์ฆ ๊ฒ€์ฆ ๋กœ๊น… ์ถ”๊ฐ€

* feat: ๋ฆฌ๋ทฐ ์กฐํšŒ ๊ฒ€์ฆ ๊ฒ€์ฆ ๋กœ๊น… ์ถ”๊ฐ€

* feat: ์„ ํƒ๋œ ํ‚ค์›Œ๋“œ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒ€์ฆ ๋กœ๊น… ์ถ”๊ฐ€

* feat: ์ค‘๋ณต ์„ ํƒ๋œ ํ‚ค์›Œ๋“œ ๊ฒ€์ฆ ๋กœ๊น… ์ถ”๊ฐ€

* feat: ํ‚ค์›Œ๋“œ ์กฐํšŒ ๊ฒ€์ฆ ๋กœ๊น… ์ถ”๊ฐ€

* feat: ์„ ํƒ ํ‚ค์›Œ๋“œ ๊ฐฏ์ˆ˜ ๊ฒ€์ฆ ๋กœ๊น… ์ถ”๊ฐ€

* feat: ์„ ํƒ๋œ ์งˆ๋ฌธ ์ค‘๋ณต ๊ฒ€์ฆ ๋กœ๊น… ์ถ”๊ฐ€

* feat: ์งˆ๋ฌธ ์กฐํšŒ ๊ฒ€์ฆ ๋กœ๊น… ์ถ”๊ฐ€

* feat: ์ค‘๋ณต ์งˆ๋ฌธ ๊ฒ€์ฆ ๋กœ๊น… ์ถ”๊ฐ€

* feat: ์Šคํ”„๋ง ๋ฐœ์ƒ ์˜ˆ์™ธ ๋กœ๊น…์— ๋ฉ”์„ธ์ง€ ์ถ”๊ฐ€

* feat: ์ธ์ฝ”๋”ฉ ์„ค์ •

* style: ๊ฐœํ–‰ ์ˆ˜์ •

Co-authored-by: Donghoon Lee <[email protected]>

* style: ๊ฐœํ–‰ ๋ฐ ๊ณต๋ฐฑ ์ˆ˜์ •

* refactor: ๋ถˆํ•„์š”ํ•œ ๊ฒ€์ฆ ์ œ๊ฑฐ

- ์„ ํƒ๋œ ํ‚ค์›Œ๋“œ์™€ ์งˆ๋ฌธ์ด DB์— ์žˆ๋Š”์ง€๋ฅผ validator ์—์„œ ๊ฒ€์ฆํ•œ ํ›„์—๋„, repository.getById ๋ฅผ ํ•  ๋•Œ ํ•œ๋ฒˆ ๋” ๊ฒ€์ฆ์ด ๋“ค์–ด๊ฐ„๋‹ค. ๋”ฐ๋ผ์„œ 'DB์— ์žˆ๋Š”์ง€'์— ๋Œ€ํ•œ ๊ฒ€์ฆ์„ validator ์—์„œ ํ•  ํ•„์š”๋Š” ์—†๋‹ค๋Š” ํŒ๋‹จ ํ•˜์— ํ•ด๋‹น ๋กœ์ง์„ ์‚ญ์ œํ•œ๋‹ค.

---------

Co-authored-by: Donghoon Lee <[email protected]>

* [FE] refactor:  Textarea๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ณตํ†ต ์žฅ๋ฌธํ˜• ๋‹ต๋ณ€ ์ž…๋ ฅ ์ปดํฌ๋„ŒํŠธ ๋ถ„๋ฆฌ (#252)

* feat: ๊ณตํ†ต textarea ์ปดํฌ๋„ŒํŠธ ์ž‘์„ฑ

* refactor: longReviewItem์˜ ๋กœ์ง์„ ์ปค์Šคํ…€ ํ›…์œผ๋กœ ๋ถ„๋ฆฌ

* refactor: longReviewItem์œผ๋กœ ์ด๋ฆ„ ๋ณ€๊ฒฝ ๋ฐ ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„

* chore: ๊ธฐ์กด์˜ ReviewItem ์ œ๊ฑฐ ๋ฐ ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํŽ˜์ด์ง€์— LongReviewItem ์ ์šฉ

* [FE] refactor: ๊ณต์šฉ ๋ชจ๋‹ฌ ํ›… ์ถ”๊ฐ€ ๋ฐ LongReviewItem ๋ฆฌํŒฉํ† ๋ง (#258)

* feat: ๋ชจ๋‹ฌ ์ƒํƒœ ๊ด€๋ฆฌ ํ›… ์ถ”๊ฐ€

* refactor: LongReviewItem ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์™ธ๋ถ€์˜ event๋ฅผ props๋กœ ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก ๋ณ€๊ฒฝ

* [FE] test: LandingPage์—์„œ ์‚ฌ์šฉํ•˜๋Š” API์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ (#251)

* chore: ๋ถˆํ•„์š”ํ•œ Fragment ์ œ๊ฑฐ

* test: LandingPage์—์„œ ์‚ฌ์šฉํ•˜๋Š” api ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

* [FE] refactor: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํŽ˜์ด์ง€์— react query๋ฅผ ์ ์šฉํ•˜๊ณ  API ์—ฐ๋™ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ (#256)

* refactor: ๋ฆฌ๋ทฐ ์ž‘์„ฑ์„ ์œ„ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๋กœ์ง์— react query ์ ์šฉ

* refactor: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํ›„ ๊ฒŒ์‹œ ์š”์ฒญ ๋กœ์ง์— useMutation ์ ์šฉ

* refactor: query key ์ƒ์ˆ˜ํ™” ๋ฐ ๋ฆฌ๋ทฐ ์ž‘์„ฑ์„ ์œ„ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๋กœ์ง์„ useReviewForm์—์„œ ์ œ๊ฑฐ

* chore: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํŽ˜์ด์ง€์— ErrorSuspenseContainer ์ ์šฉ

* chore: styled component๋ช… ์ˆ˜์ •

* chore: ๋ฆฌ๋ทฐ ์ž‘์„ฑ์„ ์œ„ํ•œ mock data๋ฅผ ๋ณ€๊ฒฝ๋œ api ํ˜•์‹์— ๋งž๊ฒŒ ์ˆ˜์ •

* chore: useGetDataToWrite๊ฐ€ ๋” ๋งŽ์€ ๋ฐ˜ํ™˜๊ฐ’์„ ์ œ๊ณตํ•˜๋„๋ก ์ˆ˜์ •

* test: useGetDataToWrite์˜ API ์š”์ฒญ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ

* chore: dataToWrite๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ ์ƒํƒœ ๊ธฐ๋ณธ๊ฐ’ ์ง€์ •

* chore: msw๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฆฌ๋ทฐ ์ƒ์„ฑ post ์š”์ฒญ mocking

* chore: ๋ฆฌ๋ทฐ ์ •๋ณด mocking data ์ƒ์„ฑ

* chore: useMutationReview๊ฐ€ UseMutationResult ํƒ€์ž… ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ์„ค์ •

* test: useMutateReview์˜ API ์š”์ฒญ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ

* chore: useGetDataToWrite์˜ ๋ฐ˜ํ™˜๊ฐ’์„ ๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ˆ˜์ •

* chore: LongReviewItem ์ปดํฌ๋„ŒํŠธ ์ ์šฉ

* [FE] fix: ์งˆ๋ฌธ ๋ฒˆํ˜ธ๊ฐ€ ์ž˜๋ชป ์ถœ๋ ฅ๋˜๋Š” ์˜ค๋ฅ˜ ๋ฐ ๋ฆฌ๋ทฐ ์ž‘์„ฑ ์™„๋ฃŒ ์‹œ ์ž˜๋ชป๋œ ๊ฒฝ๋กœ๋กœ ์ด๋™ํ•˜๋Š” ์˜ค๋ฅ˜ ์ˆ˜์ • (#265)

* fix: ์งˆ๋ฌธ ๋ฒˆํ˜ธ๊ฐ€ ์ž˜๋ชป ์ถœ๋ ฅ๋˜๋Š” ์˜ค๋ฅ˜ ์ˆ˜์ •

* fix: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ์™„๋ฃŒ ์‹œ ์ž˜๋ชป๋œ ๊ฒฝ๋กœ๋กœ ์ด๋™๋˜๋Š” ๋ฌธ์ œ ์ˆ˜์ •

* [BE] feat: ์งˆ๋ฌธ ๋ฆฌ๋ทฐ์ด ์ด๋ฆ„์œผ๋กœ ์น˜ํ™˜ (#262)

* chore: cd ํ…Œ์ŠคํŠธ ํ™•์ธ ์ฝ”๋“œ ์ž‘์„ฑ (#272)

* fix: ์ƒ์„ธ ๋‚ด์šฉ ํ‘œ์‹œํ•  ๋•Œ ๋ฆฌ๋ทฐ์ด ์ด๋ฆ„ ์น˜ํ™˜ (#270)

* [FE] feat: ํด๋ฆฝ๋ณด๋“œ ๋ณต์‚ฌ ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„ (#261)

* feat: ํด๋ฆฝ๋ณด๋“œ ๋ณต์‚ฌ ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„

Co-authored-by: skylar1220 <[email protected]>

* fix: ๋ถ€๋ชจ ์š”์†Œ์˜ ๋„ˆ๋น„์— ๋”ฐ๋ผ CopyTextButton์ด ์ž‘์•„์ง€๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ

* refactor: ReviewGroupDataModal ์Šคํƒ€์ผ ์กฐ์ • - ์ „์ฒด ํฌ๊ธฐ ์ง€์ • ๋ฐ gap ์กฐ์ •

* chore: ๋ถˆํ•„์š”ํ•œ padding ์ œ๊ฑฐ

* chore: index ํŒŒ์ผ์— CopyTextButton ์ถ”๊ฐ€

---------

Co-authored-by: skylar1220 <[email protected]>

* [FE] chore: front_deploy๋ฅผ develop์— ๋ฐ˜์˜ (#276)

* [FE] feat: ์งˆ๋ฌธ ์ž‘์„ฑ ํŽ˜์ด์ง€ QuestionCard, ReviewWritingCard ๊ณตํ†ต ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ค๊ณ , ์Šฌ๋ผ์ด๋” ๋ฐฉ์‹์˜ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ (#247)

* chore: .gitignore์—์„œ ์ฃผ์„ ์ œ๊ฑฐ

* feat: QuestionCard ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„

* feat: ReviewWritingCard ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„

* style: CSS ์†์„ฑ ์ˆœ์„œ ์ •๋ ฌ

* refactor: ์ œ๋ชฉ๊ณผ ๋‚ด์šฉ์„ ๊ฐ๊ฐ Header์™€ Main ์„น์…˜์œผ๋กœ ๋ถ„๋ฆฌ

* feat: ์Šฌ๋ผ์ด๋” ๋ฐฉ์‹์œผ๋กœ ์งˆ๋ฌธ ์นด๋“œ๊ฐ€ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ „ํ™˜๋˜๋Š” ๊ธฐ๋Šฅ ์ถ”๊ฐ€

* design: pretendard ํฐํŠธ ์ ์šฉ

* chore: ํ—ค๋” review me ๋Œ€๋ฌธ์ž๋กœ ๋ณ€๊ฒฝ

* refactor: QuestionCard, ReviewWritingCard ํด๋” ์œ„์น˜ ๋ณ€๊ฒฝ

- ReviewWritingFormPage์˜ components๋กœ ์ด๋™

* [FE] ์งˆ๋ฌธ ์ž‘์ • ํŽ˜์ด์ง€์— ํ•„์š”ํ•œ ์งˆ๋ฌธ ๋ชฉ ๋ฐ์ดํ„ฐ ๋ฐ ์นด๋“œ์˜ ์ƒํƒœ ์ฒ˜๋ฆฌ (#263)

* [BE] fix: CD ์Šคํฌ๋ฆฝํŠธ ์ˆ˜์ • (#246)

* fix: CD ์Šคํฌ๋ฆฝํŠธ ์ˆ˜์ •

* chore: ์ €์žฅ ๋ฐ์ดํ„ฐ dev์—์„œ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ˆ˜์ •

* [FE] refactor: LandingPage ๊ฒฝ๋กœ โ€ฆ
Kimprodp added a commit that referenced this pull request Aug 21, 2024
* [FE] ํ”„๋ก ํŠธ์—”๋“œ ์ดˆ๊ธฐ ์„ธํŒ… (#5)

* ci: webpack, react, typescript ์„ค์ •

* ci: eslint, prettier, stylelint ์„ค์ •

* [BE] feat: ์ดˆ๊ธฐ ํ™˜๊ฒฝ ์„ค์ • (#8)

* feat: ์ดˆ๊ธฐ ํ™˜๊ฒฝ ์„ค์ •

* refactor: ํด๋ž˜์Šค ์ข…๋ฃŒ ์ „ ๊ฐœํ–‰ ์ œ๊ฑฐ

* build: application.yml ์„ค์ •

* [BE] feat: ์ดˆ๊ธฐ ์—”ํ‹ฐํ‹ฐ ์ž‘์„ฑ (#10)

* feat: ์ดˆ๊ธฐ ์—”ํ‹ฐํ‹ฐ ์ž‘์„ฑ

* refactor: ๋ฆฌ๋ทฐ ๋‚ด์šฉ๊ณผ ๋ฆฌ๋ทฐ๋ฅผ ๋‹ค๋Œ€์ผ ์—ฐ๊ฒฐ

* refactor: ํŒจํ‚ค์ง€ ๊ตฌ์กฐ ๊ณ ๋ คํ•˜์—ฌ ProjectGroup์œผ๋กœ ์ˆ˜์ •

* refactor: Project -> Reviewer๋กœ ๋ณ€๊ฒฝ

* refactor: ํ…Œ์ด๋ธ”๋ช… ์ผ์น˜ (reviewer_group)

* [BE] feat: ๋ฆฌ๋ทฐ ์ž‘์„ฑ (#15)

* feat: ์ดˆ๊ธฐ ์—”ํ‹ฐํ‹ฐ ์ž‘์„ฑ

* refactor: ๋ฆฌ๋ทฐ ๋‚ด์šฉ๊ณผ ๋ฆฌ๋ทฐ๋ฅผ ๋‹ค๋Œ€์ผ ์—ฐ๊ฒฐ

* refactor: ํŒจํ‚ค์ง€ ๊ตฌ์กฐ ๊ณ ๋ คํ•˜์—ฌ ProjectGroup์œผ๋กœ ์ˆ˜์ •

* refactor: Project -> Reviewer๋กœ ๋ณ€๊ฒฝ

* refactor: ํ…Œ์ด๋ธ”๋ช… ์ผ์น˜ (reviewer_group)

* feat: ๋ฉค๋ฒ„ ๋ ˆํฌ์ง€ํ† ๋ฆฌ ์ƒ์„ฑ

* feat: ๋ฆฌ๋ทฐ์–ด๊ทธ๋ฃน ๋ ˆํฌ์ง€ํ† ๋ฆฌ ์ƒ์„ฑ

* feat: ๋ฆฌ๋ทฐ ๋ฌธํ•ญ ๋ ˆํฌ์ง€ํ† ๋ฆฌ ์ƒ์„ฑ

* feat: ํ‚ค์›Œ๋“œ ๋ ˆํฌ์ง€ํ† ๋ฆฌ ์ƒ์„ฑ

* feat: ๋ฆฌ๋ทฐ ํ‚ค์›Œ๋“œ ๋ ˆํฌ์ง€ํ† ๋ฆฌ ์ƒ์„ฑ

* feat: ๋ฆฌ๋ทฐ ๋ ˆํฌ์ง€ํ† ๋ฆฌ ์ƒ์„ฑ

* feat: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ๊ธฐ๋Šฅ ๊ตฌํ˜„

* test: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ๊ธฐ๋Šฅ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

---------

Co-authored-by: donghoony <[email protected]>
Co-authored-by: nayonsoso <[email protected]>

* [BE] feat: ํ…Œ์ŠคํŠธ ๋ฉ”์„œ๋“œ๋ณ„ ๊ฒฉ๋ฆฌ (#19)

* feat: ํ…Œ์ŠคํŠธ ๊ฒฉ๋ฆฌ๋ฅผ ์œ„ํ•œ DB Cleaner ๋ฐ Extension ๊ตฌํ˜„

* feat: Service์—์„œ ๊ณตํ†ต์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์–ด๋…ธํ…Œ์ด์…˜ ์ œ๊ณต

* test: ์„œ๋น„์Šค ํ…Œ์ŠคํŠธ ์–ด๋…ธํ…Œ์ด์…˜ ์‚ฌ์šฉํ•˜๋„๋ก ์ˆ˜์ •

* fix: ๋ˆ„๋ฝ๋œ ๋ฆฌ๋ทฐ ์ž‘์„ฑ ๋งคํ•‘ URL ์ถ”๊ฐ€ (#17)

* [BE] feat: ๋ฆฌ๋ทฐ ์กฐํšŒ (#22)

* feat: ๋ฆฌ๋ทฐ ์กฐํšŒ ๊ธฐ๋Šฅ ์ถ”๊ฐ€

* style: ๊ฐœํ–‰ ๋ณ€๊ฒฝ

* test: ๋ฆฌ๋ทฐ ์กฐํšŒ ๊ธฐ๋Šฅ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

* refactor: ๋ฆฌ๋ทฐ ์กฐํšŒ ๋ฉ”์„œ๋“œ๋ช… ๋ณ€๊ฒฝ

* refactor: id ํƒ€์ž… ๋ณ€๊ฒฝ

* style: ๊ฐœํ–‰ ์ˆ˜์ •

* fix: PostMapping ์ˆ˜์ •

---------

Co-authored-by: KIMGYUTAE <[email protected]>
Co-authored-by: donghoony <[email protected]>

* [BE] feat: ์ปค์Šคํ…€ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ (#20)

* feat: ์ปค์Šคํ…€ ์˜ˆ์™ธ ์ƒ์„ฑ

* feat: ์ปค์Šคํ…€ ์˜ˆ์™ธ ์ ์šฉ

* feat: ๊ธ€๋กœ๋ฒŒ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ

* [BE] feat: ๋ฆฌ๋ทฐ์–ด ๊ทธ๋ฃน ์ •๋ณด ๋ฐ ํ‚ค์›Œ๋“œ ์กฐํšŒ API (#24)

* feat: ํ‚ค์›Œ๋“œ ์กฐํšŒ API

* feat: ๋ฆฌ๋ทฐ ๊ทธ๋ฃน ์กฐํšŒ API

* refactor: PathVariable ๋ณ€์ˆ˜๋ช… ๋ณ€๊ฒฝ

* [FE] ๋ฆฌ๋ทฐ ์ž‘์„ฑํ™”๋ฉด๊ณผ ์ƒ์„ธ ๋ฆฌ๋ทฐ ๋ณด๊ธฐ ํ™”๋ฉด ๊ฒฐํ•ฉ (#26)

* fix : webpack dev sever ์—ด ๋•Œ ์˜ค๋ฅ˜ ์ˆ˜์ •

- package.json ์—์„œ type :"module" ์‚ญ์ œ , stylelint ๊ด€๋ จ ์„ค์ • ์‚ญ์ œ

Co-Authored-By: ImxYJL <[email protected]>

* ci : svgํŒŒ์ผ ๊ด€๋ จ ํ™˜๊ฒฝ ์…‹ํŒ…

Co-Authored-By: ImxYJL <[email protected]>

* design : reset ์Šคํƒ€์ผ, global style์—์„œ ํฐํŠธ ์ ์šฉ

Co-Authored-By: ImxYJL <[email protected]>

* feat: ๋ฆฌ๋ทฐ ์ž ๊ธˆ ๋ฒ„ํŠผ ์ถ”๊ฐ€

Co-Authored-By: ImxYJL <[email protected]>

* feat: ์ƒ์„ธ ๋ฆฌ๋ทฐ ๋ณด๊ธฐ ํ™”๋ฉด์˜ ์งˆ๋ฌธ,๋‹ต ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€

Co-Authored-By: ImxYJL <[email protected]>

* feat: ์ƒ์„ธ ๋ฆฌ๋ทฐ ๋ณด๊ธฐ ํ™”๋ฉด์˜ ํ”„๋กœ์ ํŠธ ์„ค๋ช… ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€

Co-Authored-By: ImxYJL <[email protected]>

* feat : ์ƒ์„ธ ๋ฆฌ๋ทฐ ๋ณด๊ธฐ ํ™”๋ฉด ํŽ˜์ด์ง€ ์ถ”๊ฐ€ ๋ฐ ์ƒ์„ธ ๋ฆฌ๋ทฐ ๋ฐ์ดํ„ฐ ํƒ€์ž… ์ถ”๊ฐ€

Co-Authored-By: ImxYJL <[email protected]>

* fix: webpack dev server ์—ด ๋•Œ ์˜ค๋ฅ˜ ์ˆ˜์ •

Co-authored-by: soosoo22 <[email protected]>

* design: reset css ์ ์šฉ

Co-authored-by: soosoo22 <[email protected]>

* feat: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํŽ˜์ด์ง€ ๊ตฌํ˜„

Co-authored-by: soosoo22 <[email protected]>

* ci: svg ํŒŒ์ผ ๊ด€๋ จ ์„ค์ •

* fix : ๋จธ์ง€์ถฉ๋Œ ํ•ด๊ฒฐ ๋ฐ ์˜คํƒ€ ์ˆ˜์ •

* feat: react-router-dom, react-router ์„ค์น˜ ๋ฐ ์„ค์ •

* refactor: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํŽ˜์ด์ง€์™€ ์ƒ์„ธ ๋ฆฌ๋ทฐ ๋ณด๊ธฐ ํŽ˜์ด์ง€ ๊ฒฐํ•ฉ ๋ฐ ๋ฆฌํŒฉํ† ๋ง

* refactor: ๋ฆฌ๋ทฐ ํƒ€์ž… ํŒŒ์ผ ๋ฆฌํŒฉํ† ๋ง ๋ฐ ํƒ€์ž… ์ถ”๊ฐ€

* feat: api ์„ค์ • ์ถ”๊ฐ€ ๋ฐ ์ƒ์„ธ ๋ฆฌ๋ทฐ ๋ณด๊ธฐ ํŽ˜์ด์ง€์— api ํ•ธ๋“ค๋Ÿฌ ์ถ”๊ฐ€

---------

Co-authored-by: ImxYJL <[email protected]>
Co-authored-by: chysis <[email protected]>
Co-authored-by: soosoo22 <[email protected]>

* [BE] refactor: ํŒจํ‚ค์ง€ ๊ตฌ์กฐ ๋ฆฌํŒฉํ„ฐ๋ง (#30)

* refactor: ํŒจํ‚ค์ง€ ๊ตฌ์กฐ ๊ตฌ์ฒดํ™”

* refactor: ํŒจํ‚ค์ง€ ๊ตฌ์กฐ ๊ตฌ์ฒดํ™”(์„œ๋น„์Šค, ์ปจํŠธ๋กค๋Ÿฌ, ๋ ˆํฌ์ง€ํ† ๋ฆฌ)

* [BE] feat: ๋ฆฌ๋ทฐ์–ด ๊ทธ๋ฃน ์„ค๋ช… ์ž‘์„ฑ, ๋งˆ๊ฐ ๊ธฐํ•œ ๋ฐ ๊ฒ€์ฆ ๋กœ์ง ์ถ”๊ฐ€ (#34)

* feat: BadRequestException ์ถ”๊ฐ€

* feat: ๋ฆฌ๋ทฐ์–ด ๊ทธ๋ฃน ์ด๋ฆ„, ์„ค๋ช… ๊ธธ์ด ๊ฒ€์ฆ

* [FE] design: theme ,์ „์—ญ ์Šคํƒ€์ผ์„ ์„ค์ • (#41)

* chore: ๋ถˆํ•„์š”ํ•œ ํŒŒ์ผ ์‚ญ์ œ

Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: soosoo22 <[email protected]>
Co-Authored-By: Fe <[email protected]>

* design: theme ์ƒ์„ฑ

- ์ƒ‰์ƒ, ํฐํŠธ ์‚ฌ์ด์ฆˆ, ํฐํŠธ wieght ์„ค์ •

Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: soosoo22 <[email protected]>
Co-Authored-By: Fe <[email protected]>

* design: emotion ThemeProvider ์ ์šฉ ๋ฐ Theme ํƒ€์ž… ํ™•์žฅ

- emotion์—์„œ ์ œ๊ณตํ•˜๋Š” Theme ํƒ€์ž…์ด ๋นˆ ๊ฐ์ฒด์—ฌ์„œ ์ฝ”๋“œ์—์„œ ์‚ฌ์šฉํ•˜๋Š” theme์— ๋งž๊ฒŒ ํƒ€์ž…์„ ํ™•์žฅํ•จ

Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: soosoo22 <[email protected]>
Co-Authored-By: Fe <[email protected]>

* design : rem ์…‹ํŒ… ๋ฐ reset.css๋ฅผ globalStyle์— ์ ์šฉ

Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: soosoo22 <[email protected]>
Co-Authored-By: Fe <[email protected]>

* chore: App์—์„œ ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ ์‚ญ์ œ

Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: soosoo22 <[email protected]>
Co-Authored-By: Fe <[email protected]>

---------

Co-authored-by: ImxYJL <[email protected]>
Co-authored-by: soosoo22 <[email protected]>
Co-authored-by: Fe <[email protected]>

* [FE] ci: ๋ฆฌ์•กํŠธ ์ฟผ๋ฆฌ ๋ฐ msw ์„ค์น˜, eslint import rule ์ถ”๊ฐ€ ๋ฐ ์ ์šฉ (#44)

* ci: eslint ์˜ค๋ฅ˜ ์ˆ˜์ • ๋ฐ import rule ์ถ”๊ฐ€ ๋ฐ ๊ด€๋ จ ํ”Œ๋Ÿฌ๊ทธ์ธ ์„ค์น˜

- eslint-config-prettier
- eslint-plugin-import

Co-Authored-By: badahertz52 <[email protected]>
Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: Fe <[email protected]>

* style: eslint ์ ์šฉ์œผ๋กœ ์ธํ•œ ์ฝ”๋“œ ํฌ๋งทํŒ… ๋ณ€๊ฒฝ

import ์ˆœ์„œ ์ ์šฉ

Co-Authored-By: badahertz52 <[email protected]>
Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: Fe <[email protected]>

* ci: msw ์„ค์น˜

Co-Authored-By: badahertz52 <[email protected]>
Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: Fe <[email protected]>

---------

Co-authored-by: badahertz52 <[email protected]>
Co-authored-by: ImxYJL <[email protected]>
Co-authored-by: Fe <[email protected]>

* [BE] docs: Swagger๋ฅผ ํ™œ์šฉํ•œ API ๋ฌธ์„œ ์ž๋™ํ™” (#31)

* chore: swagger-ui ์„ค์ • ์ถ”๊ฐ€

* feat: swaggerConfig ์ถ”๊ฐ€

* docs: ์ปจํŠธ๋กค๋Ÿฌ์— swagger ์–ด๋…ธํ…Œ์ด์…˜ ์ถ”๊ฐ€

* docs: dto์— swagger ์–ด๋…ธํ…Œ์ด์…˜ ์ถ”๊ฐ€

* chore: api ๋ฌธ์„œ ์„ค์ • ํŒŒ์ผ ์ถ”๊ฐ€

* refactor: SwaggerConfig info ์„ค์ • ํŒŒ์ผ ๋ณ€์ˆ˜ ์ฐธ์กฐํ•˜๋„๋ก ๋ณ€๊ฒฝ

* docs: api ๋ฌธ์„œ์— ์ƒํƒœ์ฝ”๋“œ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋…ธ์ถœ๋˜๋„๋ก ๋ณ€๊ฒฝ

* chore: api ๋ฌธ์„œ ํŒŒ์ผ๋ช… ๋ณ€๊ฒฝ

* chore: api-docs ํ”„๋กœํผํ‹ฐ๋ช… ๋ณ€๊ฒฝ

* refactor: ํ”„๋กœํผํ‹ฐ ์ •๋ณด์™€ ์„ค์ • ํด๋ž˜์Šค ๋ถ„๋ฆฌ

* refactor: ์ปจํŠธ๋กค๋Ÿฌ ๋‚ด swagger ์–ด๋…ธํ…Œ์ด์…˜ ๋ถ„๋ฆฌ

---------

Co-authored-by: KIMGYUTAE <[email protected]>

* [BE] feat: ๋ฆฌ๋ทฐ ๋„๋ฉ”์ธ ๊ตฌ์ฒดํ™”, ์ •์ฑ… ๊ตฌํ˜„  (#43)

* feat: dto ๊ฒ€์ฆ์„ ์œ„ํ•œ ์˜์กด์„ฑ ์ถ”๊ฐ€

* feat: dto์— jakarta validation ์–ด๋…ธํ…Œ์ด์…˜ ์ถ”๊ฐ€

* feat: ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ์š”์ฒญ์„ ๊ฒ€์ฆํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค์ •

* feat: FieldError ๋‚ด์šฉ์„ ๋ณด์—ฌ์ค„ ์‘๋‹ต ๊ฐ์ฒด ์ƒ์„ฑ

* feat: FieldError ํ•ธ๋“ค๋Ÿฌ ์ถ”๊ฐ€

* refactor: ๋ฌธ์ž์—ด ๊ณต๋ฐฑ ๊ฒ€์ฆ์„ ์œ„ํ•ด NotBlank ์‚ฌ์šฉ

* style: todo ์ฃผ์„ ์ถ”๊ฐ€

* feat: ๋ฐ๋“œ๋ผ์ธ์ด ์ง€๋‚˜๋ฉด ๋ฆฌ๋ทฐ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์—†๋„๋ก ํ•˜๋Š” ๊ธฐ๋Šฅ ์ถ”๊ฐ€

* refactor: ์‚ฌ์ด์ฆˆ ๊ฒ€์ฆ๋ฌธ ์ œ๊ฑฐ

* style: ๊ฐœํ–‰ ๋ณ€๊ฒฝ

* refactor: ์˜ˆ์™ธ ์ด๋ฆ„์„ ๊ณผ๊ฑฐํ˜•์œผ๋กœ ๋ณ€๊ฒฝ

* refactor: RFC 9457 ํ˜•์‹์„ ์ง€ํ‚ค๋ฉด์„œ ํ•„๋“œ ์—๋Ÿฌ ์ •๋ณด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ์ˆ˜์ •

* chore: ์˜คํƒ€ ์ˆ˜์ •

* fix: conflict ํ•ด๊ฒฐ

* feat: dto์— jakarta validation ์–ด๋…ธํ…Œ์ด์…˜ ์ถ”๊ฐ€

* refactor: ๋ฌธ์ž์—ด ๊ณต๋ฐฑ ๊ฒ€์ฆ์„ ์œ„ํ•ด NotBlank ์‚ฌ์šฉ

* refactor: ์‚ฌ์ด์ฆˆ ๊ฒ€์ฆ๋ฌธ ์ œ๊ฑฐ

* [BE] feat: ํ‚ค์›Œ๋“œ ๋„๋ฉ”์ธ ๊ตฌ์ฒดํ™”, ์ •์ฑ… ๊ตฌํ˜„ (#40)

* feat: ํ‚ค์›Œ๋“œ ์ผ๊ธ‰ ์ปฌ๋ ‰์…˜ ๋ฐ ์ œ์•ฝ์‚ฌํ•ญ ๊ตฌํ˜„

* build: ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์—์„œ Lombok ์˜์กด์„ฑ ์ถ”๊ฐ€

* feat: ๋ฆฌ๋ทฐ์— ์ถ”๊ฐ€๋œ ํ‚ค์›Œ๋“œ ์‚ญ์ œ

* feat: ๋ฆฌ๋ทฐ์— ํ‚ค์›Œ๋“œ ์ถ”๊ฐ€

* feat: ์ผ๊ธ‰ ์ปฌ๋ ‰์…˜์˜ ์ด๋ฆ„์„ SelectedKeywords๋กœ ๋ณ€๊ฒฝ

* refactor: ํ‚ค์›Œ๋“œ ๊ฐœ์ˆ˜ ์ •์ฑ… 5๊ฐœ ๋ฐ˜์˜

* refactor: ์ค‘๋ณต ํ‚ค์›Œ๋“œ ๋ฉ˜ํŠธ ์ˆ˜์ •

* refactor: `deleteAll`๋กœ ๋ฉ”์„œ๋“œ๋ช… ์ˆ˜์ •

* refactor: `duplicated` -> `duplicate`๋กœ ์ˆ˜์ •

* refactor: ํ‚ค์›Œ๋“œ ๋™๋“ฑ์„ฑ ๋น„๊ต

* test: ํ‚ค์›Œ๋“œ ๋“ฑ๋ก ์‹œ ๊ธฐ์กด ํ‚ค์›Œ๋“œ ์‚ญ์ œ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ

* refactor: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํ•„๋“œ ์‚ญ์ œ

* style: add newlines between comments

* refactor: ํ‚ค์›Œ๋“œ ID ๊ธฐ๋ฐ˜ ๋น„๊ต

* refactor: id๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ detail ๋น„๊ต

* refactor: ํ‚ค์›Œ๋“œ ํ…Œ์ŠคํŠธ ๋„๋ฉ”์ธ ๊ธฐ๋ฐ˜์œผ๋กœ ์ˆ˜์ •

* [BE] feat: ๋ฆฌ๋ทฐ์–ด ๊ทธ๋ฃน ๋„๋ฉ”์ธ ๊ตฌ์ฒดํ™”, ์ •์ฑ… ๊ตฌํ˜„ (#45)

* feat: Member ์—”ํ‹ฐํ‹ฐ์— GitHub ID ์†์„ฑ ์ถ”๊ฐ€

* feat: ์ž‘์„ฑํ•œ ๋ฆฌ๋ทฐ์–ด๊ฐ€ ๋ฆฌ๋ทฐ์–ด ๊ทธ๋ฃน์— ์†ํ•˜๋Š”์ง€ ๊ฒ€์ฆ

* feat: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ์‹œ, ์ด๋ฏธ ์ž‘์„ฑํ•œ ๋ฆฌ๋ทฐ๊ฐ€ ์žˆ์ง€ ์•Š์€์ง€ ๊ฒ€์ฆ

* refactor: Review ์—”ํ‹ฐํ‹ฐ์˜ reviewer์™€์˜ ์—ฐ๊ด€๊ด€๊ณ„ ManyToOne์œผ๋กœ ๋ณ€๊ฒฝ

* refactor: ์ปฌ๋Ÿผ๋ช… ์˜ค๋ฅ˜ ์ˆ˜์ •

* refactor: gitHub ํ‘œ๊ธฐ -> github์œผ๋กœ ๋ณ€๊ฒฝ

* refactor: GithubReviewGroup -> GithubReviewGroup ํด๋ž˜์Šค๋ช… ๋ณ€๊ฒฝ

* refactor: ๋ˆ„๋ฝ๋œ @Column ์ถ”๊ฐ€

* test: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํ…Œ์ŠคํŠธ ์‹œ, ๊นƒํ—™ ์‚ฌ์šฉ์ž ๊ทธ๋ฃน ๋ฐ์ดํ„ฐ ์ €์žฅ ๋ถ€๋ถ„ ์ถ”๊ฐ€

* refactor: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ์‹œ, ์ค‘๋ณต ๋ฆฌ๋ทฐ ๊ฒ€์ฆ ๋กœ์ง ์ˆ˜์ •

* refactor: GithubReviewerGroupNotFoundException์„ UnAuthorizedException ๊ตฌํ˜„ํ•˜๋„๋ก ์ˆ˜์ •

* refactor: ReviewContentExistException -> ReviewAlreadySubmittedException ํด๋ž˜์Šค๋ช… ๋ณ€๊ฒฝ

* feat: UnAuthorizedException ์ถ”๊ฐ€

* refactor: ๋ฉ”์„œ๋“œ ์ˆœ์„œ ๋ณ€๊ฒฝ

* test: ๋ถˆํ•„์š”ํ•œ given์ ˆ ์‚ญ์ œ

* test: ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ๋ฐ์ดํ„ฐ ์‚ฝ์ž… repository๋ฅผ ํ™œ์šฉํ•˜๋„๋ก ๋ณ€๊ฒฝ

---------

Co-authored-by: Donghoon Lee <[email protected]>

* [FE] ๋ฆฌ๋ทฐ ์“ฐ๊ธฐ ํŽ˜์ด์ง€์— ํ™•์ •๋œ ๋””์ž์ธ์„ ๋ฐ˜์˜ํ•˜๊ณ , ๋ฆฌํŒฉํ„ฐ๋งํ•œ๋‹ค. (#53)

* fix: eslint์—์„œ ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ์ฝ์ง€ ๋ชปํ•˜๋Š” ์˜ค๋ฅ˜ ์ˆ˜์ •

์ ˆ๋Œ€ ๊ฒฝ๋กœ ์ง€์ •

Co-Authored-By: ImxYJL <[email protected]>

* design: ์‹œ์Šคํ…œ ๊ธฐ๋ณธ ํฐํŠธ ํฌ๊ธฐ ์ง€์ •

Co-Authored-By: ImxYJL <[email protected]>

* chore: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” import ์ œ๊ฑฐ

emotion.ts์—์„œ theme ์ œ๊ฑฐ

Co-Authored-By: ImxYJL <[email protected]>

* feat: ๊ณตํ†ต ๋ฒ„ํŠผ ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„

Co-Authored-By: ImxYJL <[email protected]>

* feat: ํ‚ค์›Œ๋“œ ๋ฒ„ํŠผ ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„

Co-Authored-By: ImxYJL <[email protected]>

* feat: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํŽ˜์ด์ง€ ํผ๋ธ”๋ฆฌ์‹ฑ ๋ฐ ์ปดํฌ๋„ŒํŠธ ๋ถ„๋ฆฌ

Co-Authored-By: ImxYJL <[email protected]>

* feat: ๋ฆฌ๋ทฐ์ด ์ฝ”๋ฉ˜ํŠธ ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„

Co-Authored-By: ImxYJL <[email protected]>

* refactor: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํŽ˜์ด์ง€์—์„œ ๋ฆฌ๋ทฐ ์•„์ดํ…œ ์ปดํฌ๋„ŒํŠธ ๋ถ„๋ฆฌ

Co-Authored-By: ImxYJL <[email protected]>

* refactor: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํŽ˜์ด์ง€ ๋ฆฌํŒฉํ„ฐ๋ง

- ๋ฆฌ๋ทฐ์ด ์ฝ”๋ฉ˜ํŠธ ์ถ”๊ฐ€
- ๋ฆฌ๋ทฐ ์•„์ดํ…œ ์ปดํฌ๋„ŒํŠธ ๋ถ„๋ฆฌ
- ๋ถ€๊ฐ€์ ์ธ ์Šคํƒ€์ผ๋ง

Co-Authored-By: ImxYJL <[email protected]>

---------

Co-authored-by: ImxYJL <[email protected]>

* [FE] feat: sidebar  ๋ฆฌํŒฉํ† ๋ง ๋ฐ ๊ธฐ๋Šฅ ์ถ”๊ฐ€  , topbar ์ถ”๊ฐ€, ๋ฐ˜์‘ํ˜• ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ ์ ์šฉ (#55)

* style: globalStyles.ts์—์„œ ๊ฒฝ๋กœ ๊ณต๋ฐฑ ์ถ”๊ฐ€

* docs: ๋ถˆํ•„์š”ํ•œ import ์‚ญ์ œ

Co-Authored-By: soosoo22 <[email protected]>

* design : theme ์ถ”๊ฐ€

- ์ถ”๊ฐ€๋œ theme : breakpoints, sidebarWidth

Co-Authored-By: soosoo22 <[email protected]>

* chore: Header ์ปดํฌ๋„ŒํŠธ ์‚ญ์ œ

Co-Authored-By: soosoo22 <[email protected]>

* feat : Topbar ์ƒ์„ฑ, logo ์ด๋ฏธ์ง€ ๋ณ€๊ฒฝ ๋ฐ SearchInput ์ƒ์„ฑ

- logo ์ด๋ฏธ์ง€ ๋ณ€๊ฒฝ
- Topbar์— ๋“ค์–ด๊ฐ€๋Š” ์ปดํฌ๋„ŒํŠธ๋“ค (SidebarOpenButtion, Logo )์ƒ์„ฑ
- userProfile ์ด๋ฏธ์ง€ ์ƒ์„ฑ
- ๊ณตํ†ต ์ปดํฌ๋„ŒํŠธ : SearchInput ui ์ƒ์„ฑ

Co-Authored-By: soosoo22 <[email protected]>

* feat : ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ ์ƒ์„ฑ

- ๋ ˆ์ด์•„์›ƒ ๊ด€๋ จ ์ปดํฌ๋„ŒํŠธ๋“ค ์ƒ์„ฑ

Co-Authored-By: soosoo22 <[email protected]>

* refactor : App์— ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ ์ ์šฉ

Co-Authored-By: soosoo22 <[email protected]>

* refactor: Sidebar ๋ฆฌํŒฉํ† ๋ง

- ๋ฉ”๋‰ด๋ช… ์ƒ์ˆ˜์ฒ˜๋ฆฌ
- ํ”ผ๊ทธ๋งˆ ๋””์ž์ธ ๋ณ€๊ฒฝ์— ๋”ฐ๋ฅธ ์ˆ˜์ •

Co-Authored-By: soosoo22 <[email protected]>

* feat: sidebar ์—ด๊ณ  ๋‹ซ๋Š” ๊ธฐ๋Šฅ ์ถ”๊ฐ€

Co-Authored-By: soosoo22 <[email protected]>

---------

Co-authored-by: soosoo22 <[email protected]>

* fix: ์ปดํŒŒ์ผ ์—๋Ÿฌ ํ•ด๊ฒฐ (#60)

Co-authored-by: nayonsoso <[email protected]>

* [FE] fix : stylelint ์ ์šฉ ์˜ค๋ฅ˜ ์ˆ˜์ •  (#66)

* fix: stylelint๋ฅผ ํ†ตํ•œ css ์†์„ฑ ์ •๋ ฌ ๊ธฐ๋Šฅ ์˜ค๋ฅ˜ ์ˆ˜์ •

- stylelint ๋ฒ„์ „16๊ณผ ์ถฉ๋Œ๋˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ ์‚ญ์ œ : stylelint-config-prettier, stylelint-prettier
- css ์ •๋ ฌ์— ํ•„์š”ํ•˜์ง€ ์•Š์€ ํ”Œ๋Ÿฌ๊ทธ์ธ ์‚ญ์ œ : stylelint-config-standard, stylelint-config-styled-componented, stylelint-webpack-plugin
- ์ถ”๊ฐ€๋กœ ์„ค์น˜ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ: postcss-syntax, @stylelint/postcss-css-in-js
- stylelint ์ ์šฉ script ์ถ”๊ฐ€
- .stylelintrc.json ์ˆ˜์ • : css ๊ด€๋ จ rule ์„ค์ •

* refactor: stylelint ์ ์šฉ์— ๋”ฐ๋ฅธ css ์†์„ฑ ์ •๋ ฌ

* ci: CI ์Šคํฌ๋ฆฝํŠธ ์ž‘์„ฑ (#70)

* [BE] test: ๊นƒํ—™ ๋ฆฌ๋ทฐ์–ด ๊ทธ๋ฃน์˜ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€ ๋ฐ fixture ๋ฏธ์ ์šฉ ๋ถ€๋ถ„ ๋ณด์™„ (#68)

* test: GithubReviewerGroupRepository ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

* test: ReviewServiceTest์— ํ…Œ์ŠคํŠธ fixture ์ ์šฉ

* test: given, when, then์ ˆ ์ถ”๊ฐ€

* test: given ๋ฐ์ดํ„ฐ ์˜ค๋ฅ˜ ์ˆ˜์ •

* [BE] chore: workflow ๋””๋ ‰ํ„ฐ๋ฆฌ ์ด๋™ (#74)

* chore: workflow ๋””๋ ‰ํ„ฐ๋ฆฌ ์ด๋™

* fix: ๋ฐฑ์—”๋“œ ๋””๋ ‰ํ„ฐ๋ฆฌ๋กœ ์ด๋™

* fix: ๋ฐฑ์—”๋“œ ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์ด๋™

* fix: checkout actions์˜ ๋””๋ ‰ํ† ๋ฆฌ ์„ค์ •

* fix: ๋””๋ ‰ํ† ๋ฆฌ ์„ค์ •...

* infra: CD ํŒŒ์ดํ”„๋ผ์ธ ์ž‘์„ฑ (#76)

* fix: cd gradle ๋””๋ ‰ํ† ๋ฆฌ ์ด๋™ (#77)

* [BE] refactor: ๋‹จ๊ฑด ๋ฆฌ๋ทฐ ์กฐํšŒ ์‹œ ๋ฆฌ๋ทฐ์–ด ์ •๋ณด ์‚ญ์ œ, ๋ฆฌ๋ทฐ ์ž‘์„ฑ ์‹œ์  ์ถ”๊ฐ€ (#65)

* refactor: ๋ฆฌ๋ทฐ ์กฐํšŒ ์‹œ ๋ฆฌ๋ทฐ ์ƒ์„ฑ ์‹œ๊ฐ ์ถ”๊ฐ€, ๋ฆฌ๋ทฐ์–ด ์ •๋ณด ์‚ญ์ œ

* fix: ํ…Œ์ŠคํŠธ ์–ด๋…ธํ…Œ์ด์…˜ ํ™œ์„ฑํ™” ๋ฐ ์ˆ˜์ •

* chore: ํ…Œ์ŠคํŠธ ํด๋ž˜์Šค ํŒจํ‚ค์ง€ ์ด๋™

* refactor: ๋ถˆํ•„์š”ํ•œ given์ ˆ ์ œ๊ฑฐ

* [FE] ๋ฆฌ๋ทฐ ์ž‘์„ฑ, ์ƒ์„ธ ๋ฆฌ๋ทฐ ๋ณด๊ธฐ ํŽ˜์ด์ง€์— ๋ฐฑ์—”๋“œ API ์—ฐ๋™ ๋ฐ dotenv-webpack ์„ค์น˜, BASE_URL์„ .env๋กœ ์ด๋™ (#78)

* chore: gitignore์— yarn-error.log ์ถ”๊ฐ€

* ci: env ํŒŒ์ผ ์‚ฌ์šฉ์„ ์œ„ํ•œ dotenv-webpack ์„ค์น˜

* refactor: ์—”๋“œํฌ์ธํŠธ์— env ํŒŒ์ผ์„ ํ†ตํ•œ API_BASE_URL ๊ฒฝ๋กœ ์ ์šฉ

* fix: ๋ฆฌ๋ทฐ ์ƒ์„ธ๋ณด๊ธฐ ๋ฐ์ดํ„ฐ์—์„œ ๋ฐฑ์—”๋“œ ์‘๋‹ต๊ณผ ์†์„ฑ ์ด๋ฆ„์ด ๋‹ฌ๋ž๋˜ ๋ถ€๋ถ„ ์ˆ˜์ •

* refactor: ๋ฐฑ์—”๋“œ ์‘๋‹ต ๋ฐ ๋ฆฌํŒฉํ† ๋ง๋œ ๋ฆฌ๋ทฐ ์“ฐ๊ธฐ ํ˜•์‹์— ๋งž๊ฒŒ ๋ฆฌ๋ทฐ ์“ฐ๊ธฐ ๋ชจํ‚น ๋ฐ์ดํ„ฐ ์ˆ˜์ •

* chore: ๋ถˆํ•„์š”ํ•œ console.log ์‚ญ์ œ

* [Fe] ์ ˆ๋Œ€ ๊ฒฝ๋กœ ์‚ฌ์šฉ ์‹œ ๋ฐœ์ƒํ•˜๋Š” eslint ์˜ค๋ฅ˜๋ฅผ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.  (#81)

* fix: stylelint๋ฅผ ํ†ตํ•œ css ์†์„ฑ ์ •๋ ฌ ๊ธฐ๋Šฅ ์˜ค๋ฅ˜ ์ˆ˜์ •

- stylelint ๋ฒ„์ „16๊ณผ ์ถฉ๋Œ๋˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ ์‚ญ์ œ : stylelint-config-prettier, stylelint-prettier
- css ์ •๋ ฌ์— ํ•„์š”ํ•˜์ง€ ์•Š์€ ํ”Œ๋Ÿฌ๊ทธ์ธ ์‚ญ์ œ : stylelint-config-standard, stylelint-config-styled-componented, stylelint-webpack-plugin
- ์ถ”๊ฐ€๋กœ ์„ค์น˜ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ: postcss-syntax, @stylelint/postcss-css-in-js
- stylelint ์ ์šฉ script ์ถ”๊ฐ€
- .stylelintrc.json ์ˆ˜์ • : css ๊ด€๋ จ rule ์„ค์ •

* refactor: stylelint ์ ์šฉ์— ๋”ฐ๋ฅธ css ์†์„ฑ ์ •๋ ฌ

* fix : ์ ˆ๋Œ€ ๊ฒฝ๋กœ ์‚ฌ์šฉ ์‹œ ์˜ค๋ฅ˜ ์ˆ˜์ •

์˜ค๋ฅ˜ : eslintimport/no-unresolved

* chore: eslintrc.cjs ์—์„œ ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ ์‚ญ์ œ

 node ํ™˜๊ฒฝ setting ์‚ญ์ œ

* [FE] ci: Jest, RTL ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ ๊ตฌ์ถ• (#84)

* fix: stylelint๋ฅผ ํ†ตํ•œ css ์†์„ฑ ์ •๋ ฌ ๊ธฐ๋Šฅ ์˜ค๋ฅ˜ ์ˆ˜์ •

- stylelint ๋ฒ„์ „16๊ณผ ์ถฉ๋Œ๋˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ ์‚ญ์ œ : stylelint-config-prettier, stylelint-prettier
- css ์ •๋ ฌ์— ํ•„์š”ํ•˜์ง€ ์•Š์€ ํ”Œ๋Ÿฌ๊ทธ์ธ ์‚ญ์ œ : stylelint-config-standard, stylelint-config-styled-componented, stylelint-webpack-plugin
- ์ถ”๊ฐ€๋กœ ์„ค์น˜ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ: postcss-syntax, @stylelint/postcss-css-in-js
- stylelint ์ ์šฉ script ์ถ”๊ฐ€
- .stylelintrc.json ์ˆ˜์ • : css ๊ด€๋ จ rule ์„ค์ •

* refactor: stylelint ์ ์šฉ์— ๋”ฐ๋ฅธ css ์†์„ฑ ์ •๋ ฌ

* fix : ์ ˆ๋Œ€ ๊ฒฝ๋กœ ์‚ฌ์šฉ ์‹œ ์˜ค๋ฅ˜ ์ˆ˜์ •

์˜ค๋ฅ˜ : eslintimport/no-unresolved

* chore: eslintrc.cjs ์—์„œ ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ ์‚ญ์ œ

 node ํ™˜๊ฒฝ setting ์‚ญ์ œ

* ci: jest ๋ฐ RTL ์„ค์น˜

* ci: jest ํƒ€์ž… ์„ค์ • ์ถ”๊ฐ€

* ci: CI๋ฅผ ์œ„ํ•œ yml ํŒŒ์ผ ํ…Œ์ŠคํŠธ

* fix: ์ž˜๋ชป ์˜ฌ๋ผ๊ฐ„ ํŒŒ์ผ ์‚ญ์ œ

---------

Co-authored-by: badahertz52 <[email protected]>

* [BE] refactor: ๋ฐœ์ƒํ•˜๋Š” ๋ชจ๋“  ์˜ˆ์™ธ์˜ ํ˜•์‹ ํ†ต์ผ (#69)

* refactor: ์ปค์Šคํ…€ ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋„๋ก ์ˆ˜์ •

* refactor: ๋ชจ๋“  ์˜ˆ์™ธ๋ฅผ ์žก์„ ์ˆ˜ ์žˆ๋„๋ก ์ˆ˜์ •

* refactor: ExceptionHandler๊ฐ€ ๋ฐ˜ํ™˜ํ•˜๋Š” ์˜ˆ์™ธ ์‘๋‹ต ํ˜•์‹ ๋ณ€๊ฒฝ

- ProblemDetail๋กœ ๋ณ€๊ฒฝ

* refactor: ResponseEntityExceptionHandler๋ฅผ ์ƒ์†ํ•˜์ง€ ์•Š๋„๋ก ๋ณ€๊ฒฝ

* feat: ResponseEntityExceptionHandler์—์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ์˜ˆ์™ธ๋ฅผ ์ง์ ‘ ํ•ธ๋“ค๋ง

* feat: CORS ์„ค์ • ์ถ”๊ฐ€ (#88)

* fix: ci PR ๋ธŒ๋žœ์น˜ ์„ค์ • (#92)

* refactor: ์˜ˆ์™ธ ํ•ธ๋“ค๋Ÿฌ ์ธ์ž ๋ณ€๊ฒฝ (#87)

* [BE] ๋„๋ฉ”์ธ ์—ฐ๊ด€๊ด€๊ณ„ ์žฌ์„ค์ • (#97)

* feat: ๊นƒํ—ˆ๋ธŒ ์•„์ด๋”” ์›์‹œ๊ฐ’ ํฌ์žฅ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* feat: ํšŒ์› `GithubId` ์‚ฌ์šฉ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* refactor: ํ‚ค์›Œ๋“œ ๋‚ด ์ปฌ๋Ÿผ ์ˆ˜์ • (content)

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* refactor: ์ผ๊ธ‰ ์ปฌ๋ ‰์…˜ ์ด๋ฆ„ ๋ณ€๊ฒฝ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* feat: ์งˆ๋ฌธ ์—”ํ‹ฐํ‹ฐ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* refactor: ๋‹ต๋ณ€ ๊ตฌ์กฐ ๋ณ€๊ฒฝ, ๊ธธ์ด ๊ฒ€์ฆ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* refactor: ํ‚ค์›Œ๋“œ ์—ฐ๊ด€๊ด€๊ณ„ ์—†์ด ์ฐธ์กฐํ•˜๋„๋ก ์„ค์ •

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* test: ๋‹ต๋ณ€ ๊ธธ์ด ํ…Œ์ŠคํŠธ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* feat: ๋ฆฌ๋ทฐ ์ƒ์„ฑ ์‹œ ํ‚ค์›Œ๋“œ ๋ฐ›์•„์„œ ์ƒ์„ฑ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* test: ๋ฆฌ๋ทฐ์–ด์™€ ๋ฆฌ๋ทฐ์ด ๊ฐ™์€ ๊ฒฝ์šฐ์˜ ์˜ˆ์™ธ ํ…Œ์ŠคํŠธ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* chore: ๋ฆฌ๋ทฐ-ํ‚ค์›Œ๋“œ ๋งคํ•‘ ํ…Œ์ด๋ธ” ์‚ญ์ œ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* fix: Fixture ์‚ฌ์šฉํ•ด ์ปดํŒŒ์ผ ์—๋Ÿฌ ํ•ด๊ฒฐ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* refactor: ์ผ๋Œ€๋‹ค ํŽธ์˜ ๋ฉ”์†Œ๋“œ ์ž‘์„ฑ,

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* feat: ๊นƒํ—ˆ๋ธŒ ์•„์ด๋”” ๊ทธ๋ฃน, ๋ฆฌ๋ทฐ์–ด ์—ฐ๊ด€๊ด€๊ณ„

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* feat: ๋ฆฌ๋ทฐ๊ทธ๋ฃน - ๋ฆฌ๋ทฐ ์ผ๋Œ€๋‹ค ๋‹จ๋ฐฉํ–ฅ ์—ฐ๊ด€๊ด€๊ณ„ ์ ์šฉ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* feat: ๋ฆฌ๋ทฐ๊ทธ๋ฃน - ๋ฆฌ๋ทฐ ์ผ๋Œ€๋‹ค ์–‘๋ฐฉํ–ฅ ์—ฐ๊ด€๊ด€๊ณ„ ์ ์šฉ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* feat: ๋ฆฌ๋ทฐ์–ด ๊ทธ๋ฃน ๊นƒํ—ˆ๋ธŒ ์•„์ด๋”” ๊ฒ€์ฆ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* feat: ์…€ํ”„๋ฆฌ๋ทฐ ๊ฒ€์ฆ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* chore: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํŒŒ์ผ ์‚ญ์ œ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* feat: ๋ฆฌ๋ทฐ ์ถ”๊ฐ€ ๊ฒ€์ฆ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* fix: ์ˆœํ™˜ ์ฐธ์กฐ NPE ํ•ด๊ฒฐ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* chore: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” import ์ œ๊ฑฐ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* chore: Github ID ํŒจํ‚ค์ง€ ์ด๋™

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* feat: ๋ฆฌ๋ทฐ - ๋ฆฌ๋ทฐ ๋‹ต๋ณ€ ์—ฐ๊ด€๊ด€๊ณ„ ์„ค์ •

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* chore: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ฝ”๋“œ ์ œ๊ฑฐ

* refactor: ๋‚ด๊ฐ€ ๋ฐ›์€ ๋ฆฌ๋ทฐ ์ƒ์„ธ ๋ณด๊ธฐ ๊ตฌํ˜„

---------

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* [FE] feat: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํŽ˜์ด์ง€ ๊ธฐ๋Šฅ ๊ตฌํ˜„ (#89)

* fix: stylelint๋ฅผ ํ†ตํ•œ css ์†์„ฑ ์ •๋ ฌ ๊ธฐ๋Šฅ ์˜ค๋ฅ˜ ์ˆ˜์ •

- stylelint ๋ฒ„์ „16๊ณผ ์ถฉ๋Œ๋˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ ์‚ญ์ œ : stylelint-config-prettier, stylelint-prettier
- css ์ •๋ ฌ์— ํ•„์š”ํ•˜์ง€ ์•Š์€ ํ”Œ๋Ÿฌ๊ทธ์ธ ์‚ญ์ œ : stylelint-config-standard, stylelint-config-styled-componented, stylelint-webpack-plugin
- ์ถ”๊ฐ€๋กœ ์„ค์น˜ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ: postcss-syntax, @stylelint/postcss-css-in-js
- stylelint ์ ์šฉ script ์ถ”๊ฐ€
- .stylelintrc.json ์ˆ˜์ • : css ๊ด€๋ จ rule ์„ค์ •

* refactor: stylelint ์ ์šฉ์— ๋”ฐ๋ฅธ css ์†์„ฑ ์ •๋ ฌ

* chore: ํ˜„์žฌ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ์ €์žฅ ๋ฒ„ํŠผ ์ˆจ๊น€ ์ฒ˜๋ฆฌ

* design: ๊ธฐ๋ณธ ํฐํŠธ ์‚ฌ์ด์ฆˆ ๋ณ€๊ฒฝ

- 15px -> 16px๋กœ ์ˆ˜์ •

* fix : ์ ˆ๋Œ€ ๊ฒฝ๋กœ ์‚ฌ์šฉ ์‹œ ์˜ค๋ฅ˜ ์ˆ˜์ •

์˜ค๋ฅ˜ : eslintimport/no-unresolved

* design: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํŽ˜์ด์ง€์˜ ์ˆ˜์ •๋œ ๋””์ž์ธ ์ ์šฉ

- ์ƒ‰์ƒ ์ฝ”๋“œ ์ˆ˜์ •
- ๋ฒ„ํŠผ ํ˜ธ๋ฒ„ ์‹œ ์Šคํƒ€์ผ๋ง ์ˆ˜์ •
- ๋ฆฌ๋ทฐ ๋งˆ๊ฐ์ผ ๋‚ ์งœ ํ˜•์‹ ๋ณ€๊ฒฝ

* design: ๋ฆฌ๋ทฐ ์งˆ๋ฌธ์— ์•ˆ๋‚ด ๋ฌธ๊ตฌ ๋ฐ placeholder ์ถ”๊ฐ€

- ๊ฐ ์งˆ๋ฌธ์— ' (20์ž ์ด์ƒ)' ๋ฌธ๊ตฌ ํ•˜๋“œ์ฝ”๋”ฉ
- ์ตœ๋Œ€ 1000์ž ์ž…๋ ฅ ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๋ฌธ๊ตฌ๋ฅผ textarea์˜ placeholder๋กœ ์ถ”๊ฐ€

* chore: eslintrc.cjs ์—์„œ ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ ์‚ญ์ œ

 node ํ™˜๊ฒฝ setting ์‚ญ์ œ

* chore: api๋ช… ๋ฐ endpoint๋ช… ์ˆ˜์ •

* chore: ๋ฆฌ๋ทฐ ์งˆ๋ฌธ ๋ชฉ๋ก์„ ์„œ๋ฒ„์—์„œ ๋ฐ›์•„์˜ค๊ธฐ ์œ„ํ•ด ์ƒ์ˆ˜ ์ œ๊ฑฐ

* chore: api ๋ฌธ์„œ ํ˜•์‹์— ๋งž๊ฒŒ ๋ฐ์ดํ„ฐ ํƒ€์ž… ์ˆ˜์ •

* fix: ํ‚ค์›Œ๋“œ ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„ ๋•Œ ํผ์ด ์ œ์ถœ๋˜๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ

* feat: ์ž‘์„ฑํ•œ ๋ฆฌ๋ทฐ ๋‚ด์šฉ์„ ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์˜ ์ƒํƒœ์™€ ๋™๊ธฐํ™”ํ•˜๋„๋ก ์„ค์ •

* design: textarea์˜ ํฌ๊ธฐ๋ฅผ ๊ณ ์ •์‹œํ‚ค๊ณ , ๋„˜์–ด๊ฐˆ ๊ฒฝ์šฐ ์Šคํฌ๋กค ๋˜๋„๋ก ๋ณ€๊ฒฝ

* design: ๊ณตํ†ต ๋ฒ„ํŠผ ์ปดํฌ๋„ŒํŠธ์— ์กฐ๊ฑด๋ถ€ ์Šคํƒ€์ผ๋ง ๊ตฌํ˜„

* design: disabled ๊ด€๋ จ ์ƒ‰์ƒ ๋ณ€์ˆ˜ ์ถ”๊ฐ€

* feat: ๋ชจ๋“  ํผ์„ ์ž‘์„ฑํ–ˆ์„ ๋•Œ ์ œ์ถœ ๋ฒ„ํŠผ์ด ํ™œ์„ฑํ™”๋˜๋„๋ก ๊ตฌํ˜„, ํ‚ค์›Œ๋“œ ์„ ํƒ ๋กœ์ง ๊ตฌํ˜„

* feat: ์ œ์ถœ ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ confirm ๋ฐœ์ƒ, ํ•œ ๋ฒˆ ๋” ํ™•์ธ ์‹œ ์ œ์ถœ๋˜๋„๋ก ๊ตฌํ˜„

* feat: ํ‚ค์›Œ๋“œ ๋ฒ„ํŠผ์„ 5๊ฐœ ์ดˆ๊ณผํ•ด์„œ ์„ ํƒํ•  ์ˆ˜ ์—†๋„๋ก ๊ตฌํ˜„

* feat: textarea์— 1000์ž๋ฅผ ์ดˆ๊ณผํ•ด์„œ ์ž…๋ ฅํ•  ์ˆ˜ ์—†๋„๋ก ๊ตฌํ˜„ ๋ฐ ํ˜„์žฌ ๊ธ€์ž์ˆ˜ ํ‘œ์‹œ

* fix: ์ด๋ฏธ ์„ ํƒ๋œ ํ‚ค์›Œ๋“œ๋ฅผ ํ•ด์ œํ•˜๋ ค ํ•ด๋„ ๊ฐœ์ˆ˜ ์ œํ•œ๋˜๋Š” ์˜ค๋ฅ˜ ์ˆ˜์ •

* refactor: ํผ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ์กฐ๊ฑด๋“ค์„ ๋ณ€์ˆ˜๋กœ ๋ถ„๋ฆฌ

* design: ํ‚ค์›Œ๋“œ ๋ฒ„ํŠผ๋“ค์˜ ํฌ๊ธฐ๋ฅผ fit-content๋กœ ๋ณ€๊ฒฝ ๋ฐ ๊ฐ€๋กœ๋กœ ๋‚˜์—ดํ•˜๋„๋ก ์ˆ˜์ •

* chore: api ์—ฐ๊ฒฐ ์ด์ „, ์ž„์‹œ๋กœ ํผ ์ •๋ณด๋ฅผ ์ฝ˜์†”์— ์ถœ๋ ฅํ•˜๋„๋ก ์„ค์ •

* chore: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ์™„๋ฃŒ ํŽ˜์ด์ง€ ๋ผ์šฐํ„ฐ ์ถ”๊ฐ€

* feat: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ์™„๋ฃŒ ํŽ˜์ด์ง€ ๋ฐ ์ž‘์„ฑ ์™„๋ฃŒ ์‹œ ํŽ˜์ด์ง€ ์ด๋™ ๊ธฐ๋Šฅ ๊ตฌํ˜„

* refactor: ๋ฆฌ๋ทฐ ์•„์ดํ…œ ์ปดํฌ๋„ŒํŠธ ๋งค์ง๋„˜๋ฒ„ ์ƒ์ˆ˜ํ™”

* chore: ์‹œ๊ณ„ ์•„์ด์ฝ˜ ์Šคํƒ€์ผ ์ปดํฌ๋„ŒํŠธํ™”

* refactor: ๋ฆฌ๋ทฐ ๊ด€๋ จ ๋ฉ”์‹œ์ง€ ์ƒ์ˆ˜ ๋ถ„๋ฆฌ

* design: ๋ฆฌ๋ทฐ ์ž‘์„ฑ๋ž€ placeholder ๋ฐ ๋ณธ๋ฌธ font weight ๋ณ€๊ฒฝ

* refactor: ๋ฆฌ๋ทฐ ๋ฌธํ•ญ ๋ฒˆํ˜ธ ๋™์ ์œผ๋กœ ๋ถ€์—ฌํ•˜๋„๋ก ๋ณ€๊ฒฝ ๋ฐ ์ƒ์ˆ˜ํ™” ์ ์šฉ

* refactor: on-, handle- prefix ๊ด€๋ จ ์ปจ๋ฒค์…˜ ์ ์šฉ ๋ฐ ํ‚ค์›Œ๋“œ ๋ฒ„ํŠผ ์ธํ„ฐํŽ˜์ด์Šค ํ™•์žฅ

* chore: ๋ฆฌ๋ทฐ ๋‹ต๋ณ€์˜ ๊ธธ์ด๊ฐ€ ์œ ํšจํ•œ์ง€ ์ฒดํฌํ•˜๋Š” ๋ณ€์ˆ˜์˜ ์ด๋ฆ„์„ ์˜๋ฏธ๋ฅผ ์ž˜ ๋“œ๋Ÿฌ๋‚ด๋„๋ก ์ˆ˜์ •

* refactor: ๊ณตํ†ต ๋ฒ„ํŠผ์˜ ํƒ€์ž…๋ณ„ ์Šคํƒ€์ผ์„ ํ•จ์ˆ˜๋กœ ๋ถ„๋ฆฌ

* style: api ํ˜ธ์ถœ ํ•จ์ˆ˜๋ช… ์ปจ๋ฒค์…˜์— ๋งž๊ฒŒ ์ˆ˜์ •

* chore: ๋ถˆํ•„์š”ํ•œ PropsWithChildren import ์ œ๊ฑฐ

---------

Co-authored-by: badahertz52 <[email protected]>

* [FE] MSW๋ฅผ mock server๋กœ ์…‹ํŒ… (#95)

* fix: stylelint๋ฅผ ํ†ตํ•œ css ์†์„ฑ ์ •๋ ฌ ๊ธฐ๋Šฅ ์˜ค๋ฅ˜ ์ˆ˜์ •

- stylelint ๋ฒ„์ „16๊ณผ ์ถฉ๋Œ๋˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ ์‚ญ์ œ : stylelint-config-prettier, stylelint-prettier
- css ์ •๋ ฌ์— ํ•„์š”ํ•˜์ง€ ์•Š์€ ํ”Œ๋Ÿฌ๊ทธ์ธ ์‚ญ์ œ : stylelint-config-standard, stylelint-config-styled-componented, stylelint-webpack-plugin
- ์ถ”๊ฐ€๋กœ ์„ค์น˜ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ: postcss-syntax, @stylelint/postcss-css-in-js
- stylelint ์ ์šฉ script ์ถ”๊ฐ€
- .stylelintrc.json ์ˆ˜์ • : css ๊ด€๋ จ rule ์„ค์ •

* refactor: stylelint ์ ์šฉ์— ๋”ฐ๋ฅธ css ์†์„ฑ ์ •๋ ฌ

* fix : ์ ˆ๋Œ€ ๊ฒฝ๋กœ ์‚ฌ์šฉ ์‹œ ์˜ค๋ฅ˜ ์ˆ˜์ •

์˜ค๋ฅ˜ : eslintimport/no-unresolved

* chore: eslintrc.cjs ์—์„œ ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ ์‚ญ์ œ

 node ํ™˜๊ฒฝ setting ์‚ญ์ œ

* style: eslint ์ ์šฉ์— ๋”ฐ๋ฅธ ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€ import ์ˆœ์„œ ์ •๋ฆฌ

* refactor: formatDate๋ฅผ utils/date ํŒŒ์ผ๋กœ ์ด๋™

* design: theme์— colors,, fontSize ๋ณ€๊ฒฝ ๋ฐ borderRadius ์ถ”๊ฐ€

* feat: MultilineTextViewer ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ

- ๊ฐœํ–‰์ด ํฌํ•จ๋œ string์— ๊ฐœํ–‰์„ ์ ์šฉํ•ด์„œ ๋ณด์—ฌ์ฃผ๋Š” ์ปดํฌ๋„ŒํŠธ

* feat: ๊นƒํ—ˆ๋ธŒ ์ €์žฅ์†Œ ์ด๋ฏธ์ง€ ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ

* feat: ๋ฆฌ๋ทฐ์™€ ๊ด€๋ จ๋œ ๋‚ ์งœ UI ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ

* featr: LockButton ์‚ญ์ œ LockToggle ์ถ”๊ฐ€

* refactor: ํ”ผ๊ทธ๋งˆ ๋””์ž์ธ ๋ณ€๊ฒฝ์— ๋”ฐ๋ฅธ ReviewDescription ๋ณ€๊ฒฝ

* feat: ReviewComment ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ

* refactor: ReviewViewSection -> ReviewSection ์œผ๋กœ ๋ณ€๊ฒฝ ๋ฐ ๋ฆฌํŒฉํ† ๋ง

- ๋ถˆํ•„์š”ํ•œ  ์ปดํฌ๋„ŒํŠธ ์‚ญ์ œ : RevieAnswer , ReviewQuestion

* refactor: DetailedReviewPage ๋ฆฌํŒฉํ† ๋ง

- ๋ชฉ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ
-  ์ถ”๊ฐ€ ๋ฐ ๋ณ€๊ฒฝ๋œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•ด ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€ ์ปดํฌ๋„ŒํŠธ(DetailedReviewPage) ๋ฆฌํŒฉํ† ๋ง
- DetailedReviewPage ํด๋”์˜ styles.ts ์‚ญ์ œ

* refactor: review์— ๋Œ€ํ•œ ํƒ€์ž… ๋ณ€๊ฒฝ

* design : ReviewDate์˜ ํด๋ก  ์Šคํƒ€์ผ ์ ์šฉ

* feat: KeywordSection ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ

- ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€ ํ‚ค์›Œ๋“œ ๋ถ€๋ถ„ ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ

* feat: ReviewSectionHeader ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ ๋ฐ ์ ์šฉ

- ๋ฆฌ๋ทฐ ์ƒ์„ธ๋ณด๊ธฐ์—์„œ ๋ฐ˜๋ณต๋˜๋Š” ์งˆ๋ฌธ,ํ‚ค์›Œ๋“œ ํ—ค๋”๋ถ€๋ถ„์„ ์ปดํฌ๋„ŒํŠธ๋กœ ๋ถ„๋ฆฌ

* design : ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€์— width ๋ณ€๊ฒฝ

* refactor: DetailedReview์˜ ๋ชฉ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ๋ฐ ๋ฆฌํŒฉํ† ๋ง

- ํƒ€์ž… ๋ณ€๊ฒฝ์— ๋”ฐ๋ฅธ ๋ชฉ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ
- KeywordSection ์ ์šฉ

* design : formWidth๋ฅผ theme์— ์ถ”๊ฐ€ ๋ฐ ๋ฆฌ๋ทฐ ์ž‘์„ฑ/๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€์— ์ ์šฉ

* fix: Layout์—์„œ ๊ฐ€๋กœ ์Šคํฌ๋กค ์ƒ๊ธฐ๋Š” ์˜ค๋ฅ˜ ์ˆ˜์ •

- 100vw๋Š” ์Šคํฌ๋กค์„ ํฌํ•จํ•œ ๋ทฐํฌํŠธ ๋„ˆ๋น„๋ผ์„œ 100%์œผ๋กœ ์ˆ˜์ •

* feat: ๋ฆฌ๋ทฐ ์ƒํŽ˜์ด์ง€ router์— ๋ผ์šฐํ„ฐ ํŒŒ๋ผ๋ฏธํ„ฐ ์ ์šฉ ๋ฐ ๊ด€๋ จ ์„ค์ • ๋ณ€๊ฒฝ

- ๋ฐ๋ชจ๋ฐ์ด๋ฅผ ์œ„ํ•ด ํ˜„์žฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์žˆ๋Š” ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€ id๋ฅผ sidebar์˜ ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€ ๋ฉ”๋‰ด link์— ์ ์šฉ
- ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€(DetailedReviewPage)์˜ api ํ•ธ๋“ค๋Ÿฌ ์ˆ˜์ •

* docs: ๋ณ€์ˆ˜๋ช… ๋ณ€๊ฒฝ (isLock -> isPublic)

* refactor: ๊นƒํ—™ ์ €์žฅ์†Œ ๋กœ๊ณ  ์ฃผ์†Œ ๋ณ€์ˆ˜๋ช… ๋ณ€๊ฒฝ

- projectImgSrc -> thumbnailUrl

* ci: msw ๊ด€๋ จ ํŒจํ‚ค์ง€ ์„ค์น˜

* ci: msw ๊ด€๋ จ ์„ค์ •ํŒŒ์ผ ์ถ”๊ฐ€

- ๋ธŒ๋ผ์šฐ์ € ํ™˜๊ฒฝ, node ํ™˜๊ฒฝ์—์„œ msw๋กœ ๋ชฉ์„œ๋ฒ„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ด€๋ จ ํŒŒ์ผ ์ถ”๊ฐ€

* feat: mock ํ•ธ๋“ค๋Ÿฌ ์ถ”๊ฐ€ ๋ฐ ์ƒ์„ธ ๋ฆฌ๋ทฐ ํŽ˜์ด์ง€ ๋ชฉ ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€

* feat:  root์—์„œ ๋ชฉ์„œ๋ฒ„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋กํ•จ

* refactor: endpoint ์ˆ˜์ •

- env ์—์„œ ์„œ๋ฒ„ ์ฃผ์†Œ ๋์— ์Šฌ๋ž˜์‹œ ๋„ฃ๋Š” ๊ฒƒ์œผ๋กœ ํ†ต์ผ

* feat: ์ƒ์„ธ ๋ฆฌ๋ทฐ ํŽ˜์ด์ง€(detailedReviewPage)์— ๋ชฉ์„œ๋ฒ„ ์—ฐ๊ฒฐ ๋ฐ ๊ด€๋ จ ์ฝ”๋“œ ์ˆ˜์ •

- ์ƒํƒœ๋ช… ๋ณ€๊ฒฝ: detailReview -> detailedReview
- detailedReview ํƒ€์ž…์— null ์ถ”๊ฐ€ ๋ฐ ๊ทธ์— ๋”ฐ๋ฅธ ์˜ค๋ฅ˜ ํ•ธ๋“ค๋ง ์ถ”๊ฐ€
- deadline์— string ํƒ€์ž…์œผ๋กœ response๋กœ ์ „๋‹ฌ๋˜์–ด์„œ new Date๋กœ ๊ฐ์‹ธ์„œ props๋กœ ์ „๋‹ฌ

* docs: indexhtml์˜ title ๋ณ€๊ฒฝ

* style: apis/review.ts ์˜ import ๊ด€๋ จ eslint rule ์ ์šฉ์— ๋”ฐ๋ฅธ ์ˆ˜์ •

* fix: ts์—์„œ process ์ฝ์ง€ ๋ชปํ•˜๋Š” ์˜ค๋ฅ˜ ์ˆ˜์ •

* fix: webpack dev server script ๋ณต์›

* [FE] ์ƒ์„ธ ๋ฆฌ๋ทฐ ํŽ˜์ด์ง€ : url router ์—ฐ๋™, ๋ณ€๊ฒฝ๋œ ๋””์ž์ธ ๋ฐ˜์˜ ๋ฐ ์„œ๋ฒ„์—์„œ api๋ฅผ ์—ฐ๋™ (#91)

* fix: stylelint๋ฅผ ํ†ตํ•œ css ์†์„ฑ ์ •๋ ฌ ๊ธฐ๋Šฅ ์˜ค๋ฅ˜ ์ˆ˜์ •

- stylelint ๋ฒ„์ „16๊ณผ ์ถฉ๋Œ๋˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ ์‚ญ์ œ : stylelint-config-prettier, stylelint-prettier
- css ์ •๋ ฌ์— ํ•„์š”ํ•˜์ง€ ์•Š์€ ํ”Œ๋Ÿฌ๊ทธ์ธ ์‚ญ์ œ : stylelint-config-standard, stylelint-config-styled-componented, stylelint-webpack-plugin
- ์ถ”๊ฐ€๋กœ ์„ค์น˜ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ: postcss-syntax, @stylelint/postcss-css-in-js
- stylelint ์ ์šฉ script ์ถ”๊ฐ€
- .stylelintrc.json ์ˆ˜์ • : css ๊ด€๋ จ rule ์„ค์ •

* refactor: stylelint ์ ์šฉ์— ๋”ฐ๋ฅธ css ์†์„ฑ ์ •๋ ฌ

* fix : ์ ˆ๋Œ€ ๊ฒฝ๋กœ ์‚ฌ์šฉ ์‹œ ์˜ค๋ฅ˜ ์ˆ˜์ •

์˜ค๋ฅ˜ : eslintimport/no-unresolved

* chore: eslintrc.cjs ์—์„œ ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ ์‚ญ์ œ

 node ํ™˜๊ฒฝ setting ์‚ญ์ œ

* style: eslint ์ ์šฉ์— ๋”ฐ๋ฅธ ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€ import ์ˆœ์„œ ์ •๋ฆฌ

* refactor: formatDate๋ฅผ utils/date ํŒŒ์ผ๋กœ ์ด๋™

* design: theme์— colors,, fontSize ๋ณ€๊ฒฝ ๋ฐ borderRadius ์ถ”๊ฐ€

* feat: MultilineTextViewer ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ

- ๊ฐœํ–‰์ด ํฌํ•จ๋œ string์— ๊ฐœํ–‰์„ ์ ์šฉํ•ด์„œ ๋ณด์—ฌ์ฃผ๋Š” ์ปดํฌ๋„ŒํŠธ

* feat: ๊นƒํ—ˆ๋ธŒ ์ €์žฅ์†Œ ์ด๋ฏธ์ง€ ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ

* feat: ๋ฆฌ๋ทฐ์™€ ๊ด€๋ จ๋œ ๋‚ ์งœ UI ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ

* featr: LockButton ์‚ญ์ œ LockToggle ์ถ”๊ฐ€

* refactor: ํ”ผ๊ทธ๋งˆ ๋””์ž์ธ ๋ณ€๊ฒฝ์— ๋”ฐ๋ฅธ ReviewDescription ๋ณ€๊ฒฝ

* feat: ReviewComment ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ

* refactor: ReviewViewSection -> ReviewSection ์œผ๋กœ ๋ณ€๊ฒฝ ๋ฐ ๋ฆฌํŒฉํ† ๋ง

- ๋ถˆํ•„์š”ํ•œ  ์ปดํฌ๋„ŒํŠธ ์‚ญ์ œ : RevieAnswer , ReviewQuestion

* refactor: DetailedReviewPage ๋ฆฌํŒฉํ† ๋ง

- ๋ชฉ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ
-  ์ถ”๊ฐ€ ๋ฐ ๋ณ€๊ฒฝ๋œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•ด ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€ ์ปดํฌ๋„ŒํŠธ(DetailedReviewPage) ๋ฆฌํŒฉํ† ๋ง
- DetailedReviewPage ํด๋”์˜ styles.ts ์‚ญ์ œ

* refactor: review์— ๋Œ€ํ•œ ํƒ€์ž… ๋ณ€๊ฒฝ

* design : ReviewDate์˜ ํด๋ก  ์Šคํƒ€์ผ ์ ์šฉ

* feat: KeywordSection ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ

- ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€ ํ‚ค์›Œ๋“œ ๋ถ€๋ถ„ ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ

* feat: ReviewSectionHeader ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ ๋ฐ ์ ์šฉ

- ๋ฆฌ๋ทฐ ์ƒ์„ธ๋ณด๊ธฐ์—์„œ ๋ฐ˜๋ณต๋˜๋Š” ์งˆ๋ฌธ,ํ‚ค์›Œ๋“œ ํ—ค๋”๋ถ€๋ถ„์„ ์ปดํฌ๋„ŒํŠธ๋กœ ๋ถ„๋ฆฌ

* design : ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€์— width ๋ณ€๊ฒฝ

* refactor: DetailedReview์˜ ๋ชฉ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ๋ฐ ๋ฆฌํŒฉํ† ๋ง

- ํƒ€์ž… ๋ณ€๊ฒฝ์— ๋”ฐ๋ฅธ ๋ชฉ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ
- KeywordSection ์ ์šฉ

* design : formWidth๋ฅผ theme์— ์ถ”๊ฐ€ ๋ฐ ๋ฆฌ๋ทฐ ์ž‘์„ฑ/๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€์— ์ ์šฉ

* fix: Layout์—์„œ ๊ฐ€๋กœ ์Šคํฌ๋กค ์ƒ๊ธฐ๋Š” ์˜ค๋ฅ˜ ์ˆ˜์ •

- 100vw๋Š” ์Šคํฌ๋กค์„ ํฌํ•จํ•œ ๋ทฐํฌํŠธ ๋„ˆ๋น„๋ผ์„œ 100%์œผ๋กœ ์ˆ˜์ •

* feat: ๋ฆฌ๋ทฐ ์ƒํŽ˜์ด์ง€ router์— ๋ผ์šฐํ„ฐ ํŒŒ๋ผ๋ฏธํ„ฐ ์ ์šฉ ๋ฐ ๊ด€๋ จ ์„ค์ • ๋ณ€๊ฒฝ

- ๋ฐ๋ชจ๋ฐ์ด๋ฅผ ์œ„ํ•ด ํ˜„์žฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์žˆ๋Š” ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€ id๋ฅผ sidebar์˜ ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€ ๋ฉ”๋‰ด link์— ์ ์šฉ
- ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€(DetailedReviewPage)์˜ api ํ•ธ๋“ค๋Ÿฌ ์ˆ˜์ •

* docs: ๋ณ€์ˆ˜๋ช… ๋ณ€๊ฒฝ (isLock -> isPublic)

* refactor: ๊นƒํ—™ ์ €์žฅ์†Œ ๋กœ๊ณ  ์ฃผ์†Œ ๋ณ€์ˆ˜๋ช… ๋ณ€๊ฒฝ

- projectImgSrc -> thumbnailUrl

* refactor: ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€ api ๋ณ€๊ฒฝ์— ๋”ฐ๋ฅธ ์ˆ˜์ •

- ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€ keyword ํƒ€์ž… ๋ณ€๊ฒฝ
- api endpoint ๋ณ€๊ฒฝ , router ๋ณ€๊ฒฝ, sidebar ์ƒ์„ธ๋ณด๊ธฐ ๊ฒฝ๋กœ ๋ณ€๊ฒฝ
- useState์— ๋นˆ ๊ฐ’์— ๋Œ€ํ•œ ํƒ€์ž… ์ถ”๋ก  ์‚ฌ์šฉ

* [BE] test: ๋„๋ฉ”์ธ ์—ฐ๊ด€๊ด€๊ณ„ ์žฌ์„ค์ • ํ›„ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ (#101)

* test: ๋ฆฌ๋ทฐ์–ด ๊ทธ๋ฃน ํ…Œ์ŠคํŠธ ์ž‘์„ฑ

* refactor: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํ…Œ์ŠคํŠธ๋ฅผ `ReviewTest`๋กœ ์ด๋™

* test: ๋ฆฌ๋ทฐ์–ด ์ค‘๋ณต ์ถ”๊ฐ€ ํ…Œ์ŠคํŠธ

* refactor: Test Fixture ์‚ฌ์šฉํ•˜๋„๋ก ์ˆ˜์ •

* refactor: ์˜ˆ์™ธ ํด๋ž˜์Šค๋ช… ํ†ต์ผ

* style: ํ…Œ์ŠคํŠธ ๊ฐœํ–‰

* refactor: ํ…Œ์ŠคํŠธ๋ช… ๋ช…ํ™•ํ•˜๊ฒŒ ์ˆ˜์ •

* refactor: ํšŒ์› ๋„๋ฉ”์ธ์—์„œ์˜ ๋น„๊ต๋ฅผ GithubId๋กœ ์ง„ํ–‰ํ•˜๋„๋ก ์ˆ˜์ •

* refactor: createdAt ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ , deadline์œผ๋กœ ์ˆ˜์ •

* refactor: ํ•„๋“œ๋ช… reviewerGithubIds๋กœ ํ†ต์ผ

* test: ๋ฆฌ๋ทฐ์–ด ์ค‘๋ณต ์ƒ์„ฑ ๊ฒ€์ฆ

* refactor: reviewer/reviewee ํ†ต์ผ

* refactor: ๋ฆฌ๋ทฐ์–ด-๋ฆฌ๋ทฐ์ด github id๋ฅผ ๋ช…์‹œ

* refactor: ํ…Œ์ŠคํŠธ์— ํ•˜๋‚˜์˜ ๊ฒ€์ฆ๋งŒ ์ง„ํ–‰๋˜๋„๋ก ์ˆ˜์ •

* [FE] feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํŽ˜์ด์ง€ ๊ธฐ๋Šฅ ๊ตฌํ˜„ (#90)

* fix: stylelint๋ฅผ ํ†ตํ•œ css ์†์„ฑ ์ •๋ ฌ ๊ธฐ๋Šฅ ์˜ค๋ฅ˜ ์ˆ˜์ •

- stylelint ๋ฒ„์ „16๊ณผ ์ถฉ๋Œ๋˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ ์‚ญ์ œ : stylelint-config-prettier, stylelint-prettier
- css ์ •๋ ฌ์— ํ•„์š”ํ•˜์ง€ ์•Š์€ ํ”Œ๋Ÿฌ๊ทธ์ธ ์‚ญ์ œ : stylelint-config-standard, stylelint-config-styled-componented, stylelint-webpack-plugin
- ์ถ”๊ฐ€๋กœ ์„ค์น˜ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ: postcss-syntax, @stylelint/postcss-css-in-js
- stylelint ์ ์šฉ script ์ถ”๊ฐ€
- .stylelintrc.json ์ˆ˜์ • : css ๊ด€๋ จ rule ์„ค์ •

* refactor: stylelint ์ ์šฉ์— ๋”ฐ๋ฅธ css ์†์„ฑ ์ •๋ ฌ

* fix : ์ ˆ๋Œ€ ๊ฒฝ๋กœ ์‚ฌ์šฉ ์‹œ ์˜ค๋ฅ˜ ์ˆ˜์ •

์˜ค๋ฅ˜ : eslintimport/no-unresolved

* chore: eslintrc.cjs ์—์„œ ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ ์‚ญ์ œ

 node ํ™˜๊ฒฝ setting ์‚ญ์ œ

* feat: DropDown ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„

- ์‚ฌ์šฉ์ž ์„ ํƒ์„ ์œ„ํ•œ `DropDown` ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ตฌํ˜„
- `onChange` ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ์™€ `options` ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜์—ฌ ์˜ต์…˜์„ ๋™์ ์œผ๋กœ ํ‘œ์‹œ

Co-Authored-By: badahertz52 <[email protected]>
Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: Fe <[email protected]>

* chore: svg ์•„์ด์ฝ˜ ํฌ๊ธฐ ์ˆ˜์ •

Co-Authored-By: badahertz52 <[email protected]>
Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: Fe <[email protected]>

* design: Topbar UI ์ˆ˜์ •

Co-Authored-By: badahertz52 <[email protected]>
Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: Fe <[email protected]>

* design: ๋ฒ„ํŠผ, ๊ฒ€์ƒ‰์ฐฝ UI ์ˆ˜์ • ํ›„ export

Co-Authored-By: badahertz52 <[email protected]>
Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: Fe <[email protected]>

* feat: ReviewPreviewCard ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„

- ๋ฆฌ๋ทฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์นด๋“œ ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„
- ๋ฆฌ๋ทฐ์–ด ๊ทธ๋ฃน ์ด๋ฆ„, ์ƒ์„ฑ์ผ, ๋ฆฌ๋ทฐ ๋‚ด์šฉ ๋ฏธ๋ฆฌ๋ณด๊ธฐ, ํ‚ค์›Œ๋“œ, ๊ณต๊ฐœ ์—ฌ๋ถ€๋ฅผ ํ‘œ์‹œ

Co-Authored-By: badahertz52 <[email protected]>
Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: Fe <[email protected]>

* chore: ReviewPreview ์ธํ„ฐํŽ˜์ด์Šค ์ถ”๊ฐ€

- ๋ฆฌ๋ทฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ์ •์˜ํ•˜๋Š” `ReviewPreview` ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

Co-Authored-By: badahertz52 <[email protected]>
Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: Fe <[email protected]>

* feat: SearchSection ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„

- ๊ฒ€์ƒ‰ ์ž…๋ ฅ์ฐฝ, ๊ฒ€์ƒ‰ ๋ฒ„ํŠผ, ๋“œ๋กญ๋‹ค์šด์„ ํฌํ•จํ•˜์—ฌ ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„

Co-Authored-By: badahertz52 <[email protected]>
Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: Fe <[email protected]>

* feat: ReviewPreviewListPage ๊ตฌํ˜„ ๋ฐ ๋ชจ์˜ ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€

- `ReviewPreviewListPage` ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„
  - `SearchSection`์„ ํฌํ•จํ•˜์—ฌ ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„
  - `ReviewPreviewCard`๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฆฌ๋ทฐ ๋ชฉ๋ก์„ ํ‘œ์‹œ
- ๋ชจ์˜ ๋ฐ์ดํ„ฐ(`mockReviewPreviews`) ์ถ”๊ฐ€

Co-Authored-By: badahertz52 <[email protected]>
Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: Fe <[email protected]>

* chore: import ์ค‘๋ณต ๋ฐ ์ˆœ์„œ ์ •๋ฆฌ, ReviewPreviewListPage ๋ผ์šฐํŠธ ์ถ”๊ฐ€

Co-Authored-By: badahertz52 <[email protected]>
Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: Fe <[email protected]>

* chore: ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์š”์†Œ๋ฅผ ๊ฐ์‹ธ๊ธฐ ๋•Œ๋ฌธ์— Container๋กœ ๋ณ€๊ฒฝ

Co-Authored-By: badahertz52 <[email protected]>
Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: Fe <[email protected]>

* feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ๋ฐ์ดํ„ฐ๋ฅผ ์„œ๋ฒ„์—์„œ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•ด getReviewListApi ํ•จ์ˆ˜ ์ถ”๊ฐ€

Co-Authored-By: badahertz52 <[email protected]>
Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: Fe <[email protected]>

* refactor: ์ƒ์„ธ ๋ฆฌ๋ทฐ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ api ์—”๋“œํฌ์ธํŠธ ์ˆ˜์ •

Co-Authored-By: badahertz52 <[email protected]>
Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: Fe <[email protected]>

* refactor: ์ƒ์„ธ ๋ฆฌ๋ทฐ ํŽ˜์ด์ง€ API ์—ฐ๋™ ๋ถ€๋ถ„ ์ˆ˜์ •

Co-Authored-By: badahertz52 <[email protected]>
Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: Fe <[email protected]>

---------

Co-authored-by: badahertz52 <[email protected]>
Co-authored-by: ImxYJL <[email protected]>
Co-authored-by: Fe <[email protected]>

* [BE] feat: ๋ฆฌ๋ทฐ ์ž‘์„ฑ API ๊ตฌํ˜„ (#102)

* refactor: ๋ฆฌ๋ทฐ ์š”์ฒญ dto ์ˆ˜์ •

* refactor: ๋ฆฌ๋ทฐ ์ฝ˜ํ…์ธ  ์ƒ์„ฑ ์‹œ, ๋ฆฌ๋ทฐ์— ์ž์‹ ์„ ์ถ”๊ฐ€ํ•˜๋„๋ก ๋ณ€๊ฒฝ

* feat: QuestionRepository ์ถ”๊ฐ€

* feat: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ๊ธฐ๋Šฅ ์ถ”๊ฐ€

* test: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

* refactor: ReviewGroup ์ƒ์„ฑ ์‹œ, GithubIdReviewerGroup๋„ ๊ฐ™์ด ์ €์žฅ๋˜๋„๋ก ๋ณ€๊ฒฝ

* refactor: GithubId equals ๋ฐ hashcode ์žฌ์ •์˜

* refactor: review ์ƒ์„ฑ ์‹œ, reviewGroup์ด null์ด ์•„๋‹ˆ๋„๋ก ๋ณ€๊ฒฝ

* refactor: EqualsAndHashCode์— id ๋ช…์‹œ

* refactor: reviewee๋ฅผ reviewerGroup ํ†ตํ•ด์„œ ๋ฐ›์•„์˜ค๋„๋ก ๋ณ€๊ฒฝ

* refactor: ํŒŒ๋ผ๋ฏธํ„ฐ long ํƒ€์ž…์œผ๋กœ ๋ณ€๊ฒฝ

* test: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ณ€์ˆ˜ ์ œ๊ฑฐ

* test: ํŒŒ๋ผ๋ฏธํ„ฐ๋ณ„๋กœ ๊ฐœํ–‰ํ•˜๋„๋ก ๋ณ€๊ฒฝ

* refactor: ReviewerGroupGithubIds์˜ reviewerGithubIds๋ฅผ CascadeType.PERSIST๋กœ ๋ณ€๊ฒฝ

* chore: ๋‹ค๋ฅธ ์ž‘์—…์—์„œ ์ง„ํ–‰๋  ์‚ฌํ•ญ์œผ๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํ…Œ์ŠคํŠธ ์‚ญ์ œ

* [FE] Github Actions๋กœ CI ๊ตฌ์ถ• (#96)

* ci: CI๋ฅผ ์œ„ํ•œ yml ํŒŒ์ผ ์ž‘์„ฑ

* ci: yarn.lock ๊ฒฝ๋กœ ์ถ”๊ฐ€

* ci: working-directory ์ถ”๊ฐ€

* cI: ๋™์ž‘ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด push ๋ธŒ๋žœ์น˜ ๊ฒฝ๋กœ ์กฐ๊ฑด์—์„œ frontend ์ž„์‹œ ์ œ๊ฑฐ

* ci: ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด ํ˜„์žฌ ๋ธŒ๋žœ์น˜๋„ ์กฐ๊ฑด์— ์ถ”๊ฐ€

* ci: package์— test ๋ช…๋ น์–ด ์ถ”๊ฐ€

* ci: yarn.lock ํŒŒ์ผ ์—…๋ฐ์ดํŠธ

* ci: ํ…Œ์ŠคํŠธ ํŒŒ์ผ ํ˜•์‹ ์ˆ˜์ •

* chore: ํ•„์š”์—†๋Š” ํŒŒ์ผ ์‚ญ์ œ

* chore: svg ํŒŒ์ผ์„ ๋Œ€๋ฌธ์ž๋กœ importํ•œ ๊ฒƒ๋“ค ์†Œ๋ฌธ์ž๋กœ ์ˆ˜์ •

* ci: ์›นํŒฉ env ์„ค์ • ์—…๋ฐ์ดํŠธ

* ci: process.env ์‚ฌ์šฉ์„ ์œ„ํ•œ ํƒ€์ž… ์„ค์ •

* ci: env ์›นํŒฉ ์„ค์ • ๊ฒฝ๋กœ๋ฅผ ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋กœ ๋ณ€๊ฒฝ

* ci: env ์›นํŒฉ ์„ค์ • ๊ฒฝ๋กœ ์ˆ˜์ •

* ci: env ์ ˆ๋Œ€๊ฒฝ๋กœ ์ˆ˜์ •

* ci: ์ ˆ๋Œ€๊ฒฝ๋กœ ์ˆ˜์ • 2

* ci: ์ฝ๊ธฐ ๊ถŒํ•œ์„ ๋ช…์‹œ์ ์œผ๋กœ ์ฃผ๊ณ  ํ…Œ์ŠคํŠธ

* ci: dist ํŒŒ์ผ ํ…Œ์ŠคํŠธ

* ci: CI ํ™˜๊ฒฝ์—์„œ๋„ env ํŒŒ์ผ ์ƒ์„ฑ

* ci: ๋ฐฐํฌ ์ •์ƒ ๋™์ž‘ ํ™•์ธ์„ ์œ„ํ•œ github pages ์ž„์‹œ ๋ฐฐํฌ ์„ค์ •

* ci: ์ž„์‹œ ๋ฐฐํฌ ์ฝ”๋“œ ์‚ญ์ œ

* ci: develop ๋ธŒ๋žœ์น˜๋กœ frontend ์ดํ•˜ ๊ฒฝ๋กœ์—์„œ PR์ด ์˜ฌ๋ผ์˜ฌ ๋•Œ CI๊ฐ€ ์‹คํ–‰๋˜๋„๋ก ์ˆ˜์ •

* ci: node ์„ค์น˜ ์—๋Ÿฌ ํ•ด๊ฒฐ

* [BE] feat: ๋ฆฌ๋ทฐ์— ํ•„์š”ํ•œ ์ •๋ณด ์กฐํšŒ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ (#103)

* test: QuestionTestFixture ์ƒ์„ฑ

* feat: ๋ชจ๋“  ๋ฆฌ๋ทฐ ๋ฌธํ•ญ์„ ์กฐํšŒํ•˜๋Š” ๊ธฐ๋Šฅ ๊ตฌํ˜„

* feat: ๋ชจ๋“  ํ‚ค์›Œ๋“œ๋ฅผ ์กฐํšŒํ•˜๋Š” ๊ธฐ๋Šฅ ๊ตฌํ˜„

* test: ReviewerGroupFixture ์ƒ์„ฑ

* feat: ๋ฆฌ๋ทฐ ์ƒ์„ฑ ์‹œ ํ•„์š”ํ•œ ๋ฆฌ๋ทฐ์–ด ๊ทธ๋ฃน ์ •๋ณด๋ฅผ ์กฐํšŒํ•˜๋Š” ๊ธฐ๋Šฅ ๊ตฌํ˜„

* feat: ๋ฆฌ๋ทฐ ์ƒ์„ฑ ์‹œ ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์กฐํšŒํ•˜๋Š” ๊ธฐ๋Šฅ ๊ตฌํ˜„

* refactor: @ServiceTest ์ ์šฉ

* refactor: swagger ์ ์šฉ

* refactor: ํ•„๋“œ๋ช… ๋ณ€๊ฒฝ

* style: ๊ฐœํ–‰ ์ถ”๊ฐ€

* refactor: ๋‚ ์งœ ํ˜•์‹ ๋ณ€๊ฒฝ

* test: import๋ฌธ ์ œ๊ฑฐ

* refactor: ReviewCreationResponse ํŒจํ‚ค์ง€ ๋ณ€๊ฒฝ

* refactor: readOnly ํŠธ๋žœ์žญ์…˜ ์ ์šฉ

* fix: ๋ฆฌ๋ทฐ์–ด ์ค‘๋ณต ๊ฒ€์ฆ ์ž„์‹œ ์ œ๊ฑฐ

---------

Co-authored-by: donghoony <[email protected]>

* [FE] ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํŽ˜์ด์ง€์—์„œ MSW๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋ฒ„ mocking (#111)

* chore: ์ค‘๋ณต๋œ ์ธํ„ฐํŽ˜์ด์Šค ์ œ๊ฑฐ

* feat: MSW ํ•ธ๋“ค๋Ÿฌ ๋ฐ mock data ์ถ”๊ฐ€

* chore: ๋ฆฌ๋ทฐ ์“ฐ๊ธฐ ํŽ˜์ด์ง€ ๋ฐ์ดํ„ฐ endpoint ์ˆ˜์ •

* feat: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํŽ˜์ด์ง€์— msw๋ฅผ ์ ์šฉํ•˜์—ฌ ์„œ๋ฒ„ mocking

* merge

* [FE]  ๊ณตํ†ต ์ปดํฌ๋„ŒํŠธ์ธ ๋ชจ๋‹ฌ์„ ๋งŒ๋“ ๋‹ค. (#110)

* fix: stylelint๋ฅผ ํ†ตํ•œ css ์†์„ฑ ์ •๋ ฌ ๊ธฐ๋Šฅ ์˜ค๋ฅ˜ ์ˆ˜์ •

- stylelint ๋ฒ„์ „16๊ณผ ์ถฉ๋Œ๋˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ ์‚ญ์ œ : stylelint-config-prettier, stylelint-prettier
- css ์ •๋ ฌ์— ํ•„์š”ํ•˜์ง€ ์•Š์€ ํ”Œ๋Ÿฌ๊ทธ์ธ ์‚ญ์ œ : stylelint-config-standard, stylelint-config-styled-componented, stylelint-webpack-plugin
- ์ถ”๊ฐ€๋กœ ์„ค์น˜ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ: postcss-syntax, @stylelint/postcss-css-in-js
- stylelint ์ ์šฉ script ์ถ”๊ฐ€
- .stylelintrc.json ์ˆ˜์ • : css ๊ด€๋ จ rule ์„ค์ •

* refactor: stylelint ์ ์šฉ์— ๋”ฐ๋ฅธ css ์†์„ฑ ์ •๋ ฌ

* fix : ์ ˆ๋Œ€ ๊ฒฝ๋กœ ์‚ฌ์šฉ ์‹œ ์˜ค๋ฅ˜ ์ˆ˜์ •

์˜ค๋ฅ˜ : eslintimport/no-unresolved

* chore: eslintrc.cjs ์—์„œ ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ ์‚ญ์ œ

 node ํ™˜๊ฒฝ setting ์‚ญ์ œ

* style: eslint ์ ์šฉ์— ๋”ฐ๋ฅธ ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€ import ์ˆœ์„œ ์ •๋ฆฌ

* refactor: formatDate๋ฅผ utils/date ํŒŒ์ผ๋กœ ์ด๋™

* design: theme์— colors,, fontSize ๋ณ€๊ฒฝ ๋ฐ borderRadius ์ถ”๊ฐ€

* feat: MultilineTextViewer ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ

- ๊ฐœํ–‰์ด ํฌํ•จ๋œ string์— ๊ฐœํ–‰์„ ์ ์šฉํ•ด์„œ ๋ณด์—ฌ์ฃผ๋Š” ์ปดํฌ๋„ŒํŠธ

* feat: ๊นƒํ—ˆ๋ธŒ ์ €์žฅ์†Œ ์ด๋ฏธ์ง€ ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ

* feat: ๋ฆฌ๋ทฐ์™€ ๊ด€๋ จ๋œ ๋‚ ์งœ UI ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ

* featr: LockButton ์‚ญ์ œ LockToggle ์ถ”๊ฐ€

* refactor: ํ”ผ๊ทธ๋งˆ ๋””์ž์ธ ๋ณ€๊ฒฝ์— ๋”ฐ๋ฅธ ReviewDescription ๋ณ€๊ฒฝ

* feat: ReviewComment ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ

* refactor: ReviewViewSection -> ReviewSection ์œผ๋กœ ๋ณ€๊ฒฝ ๋ฐ ๋ฆฌํŒฉํ† ๋ง

- ๋ถˆํ•„์š”ํ•œ  ์ปดํฌ๋„ŒํŠธ ์‚ญ์ œ : RevieAnswer , ReviewQuestion

* refactor: DetailedReviewPage ๋ฆฌํŒฉํ† ๋ง

- ๋ชฉ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ
-  ์ถ”๊ฐ€ ๋ฐ ๋ณ€๊ฒฝ๋œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•ด ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€ ์ปดํฌ๋„ŒํŠธ(DetailedReviewPage) ๋ฆฌํŒฉํ† ๋ง
- DetailedReviewPage ํด๋”์˜ styles.ts ์‚ญ์ œ

* refactor: review์— ๋Œ€ํ•œ ํƒ€์ž… ๋ณ€๊ฒฝ

* design : ReviewDate์˜ ํด๋ก  ์Šคํƒ€์ผ ์ ์šฉ

* feat: KeywordSection ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ

- ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€ ํ‚ค์›Œ๋“œ ๋ถ€๋ถ„ ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ

* feat: ReviewSectionHeader ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ ๋ฐ ์ ์šฉ

- ๋ฆฌ๋ทฐ ์ƒ์„ธ๋ณด๊ธฐ์—์„œ ๋ฐ˜๋ณต๋˜๋Š” ์งˆ๋ฌธ,ํ‚ค์›Œ๋“œ ํ—ค๋”๋ถ€๋ถ„์„ ์ปดํฌ๋„ŒํŠธ๋กœ ๋ถ„๋ฆฌ

* design : ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€์— width ๋ณ€๊ฒฝ

* refactor: DetailedReview์˜ ๋ชฉ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ๋ฐ ๋ฆฌํŒฉํ† ๋ง

- ํƒ€์ž… ๋ณ€๊ฒฝ์— ๋”ฐ๋ฅธ ๋ชฉ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ
- KeywordSection ์ ์šฉ

* design : formWidth๋ฅผ theme์— ์ถ”๊ฐ€ ๋ฐ ๋ฆฌ๋ทฐ ์ž‘์„ฑ/๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€์— ์ ์šฉ

* fix: Layout์—์„œ ๊ฐ€๋กœ ์Šคํฌ๋กค ์ƒ๊ธฐ๋Š” ์˜ค๋ฅ˜ ์ˆ˜์ •

- 100vw๋Š” ์Šคํฌ๋กค์„ ํฌํ•จํ•œ ๋ทฐํฌํŠธ ๋„ˆ๋น„๋ผ์„œ 100%์œผ๋กœ ์ˆ˜์ •

* feat: ๋ฆฌ๋ทฐ ์ƒํŽ˜์ด์ง€ router์— ๋ผ์šฐํ„ฐ ํŒŒ๋ผ๋ฏธํ„ฐ ์ ์šฉ ๋ฐ ๊ด€๋ จ ์„ค์ • ๋ณ€๊ฒฝ

- ๋ฐ๋ชจ๋ฐ์ด๋ฅผ ์œ„ํ•ด ํ˜„์žฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์žˆ๋Š” ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€ id๋ฅผ sidebar์˜ ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€ ๋ฉ”๋‰ด link์— ์ ์šฉ
- ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€(DetailedReviewPage)์˜ api ํ•ธ๋“ค๋Ÿฌ ์ˆ˜์ •

* docs: ๋ณ€์ˆ˜๋ช… ๋ณ€๊ฒฝ (isLock -> isPublic)

* refactor: ๊นƒํ—™ ์ €์žฅ์†Œ ๋กœ๊ณ  ์ฃผ์†Œ ๋ณ€์ˆ˜๋ช… ๋ณ€๊ฒฝ

- projectImgSrc -> thumbnailUrl

* ci: msw ๊ด€๋ จ ํŒจํ‚ค์ง€ ์„ค์น˜

* ci: msw ๊ด€๋ จ ์„ค์ •ํŒŒ์ผ ์ถ”๊ฐ€

- ๋ธŒ๋ผ์šฐ์ € ํ™˜๊ฒฝ, node ํ™˜๊ฒฝ์—์„œ msw๋กœ ๋ชฉ์„œ๋ฒ„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ด€๋ จ ํŒŒ์ผ ์ถ”๊ฐ€

* feat: mock ํ•ธ๋“ค๋Ÿฌ ์ถ”๊ฐ€ ๋ฐ ์ƒ์„ธ ๋ฆฌ๋ทฐ ํŽ˜์ด์ง€ ๋ชฉ ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€

* feat:  root์—์„œ ๋ชฉ์„œ๋ฒ„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋กํ•จ

* refactor: endpoint ์ˆ˜์ •

- env ์—์„œ ์„œ๋ฒ„ ์ฃผ์†Œ ๋์— ์Šฌ๋ž˜์‹œ ๋„ฃ๋Š” ๊ฒƒ์œผ๋กœ ํ†ต์ผ

* feat: ์ƒ์„ธ ๋ฆฌ๋ทฐ ํŽ˜์ด์ง€(detailedReviewPage)์— ๋ชฉ์„œ๋ฒ„ ์—ฐ๊ฒฐ ๋ฐ ๊ด€๋ จ ์ฝ”๋“œ ์ˆ˜์ •

- ์ƒํƒœ๋ช… ๋ณ€๊ฒฝ: detailReview -> detailedReview
- detailedReview ํƒ€์ž…์— null ์ถ”๊ฐ€ ๋ฐ ๊ทธ์— ๋”ฐ๋ฅธ ์˜ค๋ฅ˜ ํ•ธ๋“ค๋ง ์ถ”๊ฐ€
- deadline์— string ํƒ€์ž…์œผ๋กœ response๋กœ ์ „๋‹ฌ๋˜์–ด์„œ new Date๋กœ ๊ฐ์‹ธ์„œ props๋กœ ์ „๋‹ฌ

* docs: indexhtml์˜ title ๋ณ€๊ฒฝ

* style: apis/review.ts ์˜ import ๊ด€๋ จ eslint rule ์ ์šฉ์— ๋”ฐ๋ฅธ ์ˆ˜์ •

* fix: ts์—์„œ process ์ฝ์ง€ ๋ชปํ•˜๋Š” ์˜ค๋ฅ˜ ์ˆ˜์ •

* fix: webpack dev server script ๋ณต์›

* feat: ModalPortal ์…์„ฑ

* feat: SideModal ์ปดํฌ๋„ŒํŠธ, useSide  ์…์„ฑ ๋ฐ Sidebar์— ์ ์šฉ

* feat: ModalBackground ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ ๋ฐ ์ ์šฉ

* fix: ๋ชจ๋‹ฌ ์—ด๋ฆด ๋•Œ ์Šคํฌ๋กค๋ฐ” ๋ง‰๋Š” ๊ธฐ๋Šฅ ์˜ค๋ฅ˜ ์ˆ˜์ •

* design : ModalPortal ์‚ฌ์ด์ฆˆ ๋‹จ์œ„ ๋ณ€๊ฒฝ (% -> vw, vh)

* feat: Button ์ปดํฌ๋„ŒํŠธ๊ฐ€ button ์†์„ฑ์„ props๋กœ ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก ์ˆ˜์ •

* feat: ConfirmModal ์ƒ์„ฑ

* refactor: index.tsx์—์„œ ๋ชจ๋‹ฌ์„ ๊บผ๋‚ผ ์ˆ˜ ์žˆ๋„๋ก ๋ฆฌํŒฉํ† ๋ง

* refactor: PropsWithChildren ์ˆ˜์ •

- PropsWithChildren๋ฅผ import ํ•˜์ง€ ์•Š๊ณ  React์—์„œ ๋ฐ”๋กœ ์“ธ ์ˆ˜ ์žˆ๋„๋ก React.PropsWithChildren๋กœ  ์ˆ˜์ •

* [FE] msw๊ด€๋ จ env ์˜ค๋ฅ˜ ํ•ด๊ฒฐ  (#114)

* chore: fe/feat/105-review-writing-msw  ์˜  endpoint ๊ด€๋ จ ๋ณ€๊ฒฝ์‚ฌํ•ญ ๋ฐ˜์˜

* fix: NODE_ENV ๊ด€๋ จ ์˜ค๋ฅ˜ ์ˆ˜์ •

- ์˜ค๋ฅ˜ : env ํŒŒ์ผ์— NODE_ENV๊ฐ€ ์—†์Œ์—๋„ ์ด๋ฅผ ์ธ์‹ํ•˜๋Š” ์˜ค๋ฅ˜ ๋ฐœ์ƒ
- ์›์ธ: ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ NODE_ENV๋ฅผ ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๋‹ค๊ณ  ํ•จ
- ํ•ด๊ฒฐ: NODE_ENV๋ฅผ ์‚ญ์ œํ•˜๊ณ  MSW๋ฅผ ์‚ฌ์šฉ

* [BE] feat: ๋‚ด๊ฐ€ ๋ฐ›์€ ๋ฆฌ๋ทฐ ๋ณด๊ธฐ ๊ธฐ๋Šฅ ๊ตฌํ˜„ (#109)

* refactor: contains ์ž‘๋™์„ ์œ„ํ•œ EqualsAndHashcode ์ถ”๊ฐ€

* fix: lazyInitialization ํ•ด๊ฒฐ

* feat: ์งˆ๋ฌธ ๋ ˆํฌ์ง€ํ† ๋ฆฌ ์ƒ์„ฑ

* feat: ๋‚ด๊ฐ€ ๋ฐ›์€ ๋ฆฌ๋ทฐ ์‘๋‹ต ์ƒ์„ฑ

* refactor: ๋ฆฌ๋ทฐ ํ•ญ๋ชฉ๊ณผ ์งˆ๋ฌธ์˜ ์—ฐ๊ด€๊ด€๊ณ„ ๋ณ€๊ฒฝ ๋ฐ ๋‹ต๋ณ€ ์ตœ๋Œ€ ๊ธ€์ž์ˆ˜ DB์— ๋ฐ˜์˜

* refactor: ๋ฆฌ๋ทฐ์— ๋ฆฌ๋ทฐ๊ทธ๋ฃน ์ดˆ๊ธฐํ™” ๋ถ€๋ถ„ ์ถ”๊ฐ€

* feat: ๋‚ด๊ฐ€ ๋ฐ›์€ ๋ฆฌ๋ทฐ ์กฐํšŒ ๊ธฐ๋Šฅ ๊ตฌํ˜„

* feat: ๋ฐ›์€ ๋ฆฌ๋ทฐ๊ฐ€ ์—†์„ ๋•Œ์˜ ์‘๋‹ต ์ถ”๊ฐ€

* refactor: dto ์„ค๋ช… ์ถ”๊ฐ€

* refactor: dto ์„ค๋ช… ์ˆ˜์ •

* refactor: ์ธ์ž ํ˜•์‹ ์ˆ˜์ •, ๊ฐœํ–‰ ์ˆ˜์ •

* refactor: transactional ์–ด๋…ธํ…Œ์ด์…˜ ์ถ”๊ฐ€

* refactor: ๋‚ด๊ฐ€ ๋ฐ›์€ ๋ฆฌ๋ทฐ ์กฐํšŒํ•  ๋•ŒPage๊ฐ์ฒด ๋ง๊ณ  List๋กœ ๋ฐ›์•„์˜ค๋„๋ก ์ˆ˜์ •

* refactor: ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๋งŒ๋“œ๋Š” ๊ธฐ๋Šฅ ๋„๋ฉ”์ธ ์•ˆ์œผ๋กœ ์ด๋™

* test: ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ๊ฐœ์„ 

- ๋ณ€์ˆ˜๋ช… ์ˆ˜์ •, save ์—ฌ๋Ÿฌ๊ฐœ ๋Œ€์‹  saveAll ์‚ฌ์šฉ ๋“ฑ

* refactor: ๋งˆ์ง€๋ง‰์œผ๋กœ ๋ณธ ๋ฆฌ๋ทฐID๊ฐ€ ์—†๋Š” ๋กœ์ง์— ๋Œ€ํ•ด ์ˆ˜์ •

- lastViewedReviewId๋ฅผ ์ž…๋ ฅํ•˜์ง€ ์•Š์œผ๋ฉด 999๊ฐ™์ด ์ด์ƒํ•˜๊ฒŒ ํฐ ์ˆ˜๋ฅผ ๋„ฃ์–ด์ฃผ๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ, ๊ฐ€์žฅ ํฐ ๊ฐ’์„ ๋„ฃ์–ด์ฃผ๋„๋ก ์ˆ˜์ •

* docs: ์Šค์›จ๊ฑฐ ๋ฐ์ฝ”๋ ˆ์ด์…˜ ์ ์šฉ

* refactor: lastReviewId๊ฐ€ null ์ด์–ด๋„ ๊ฐ€์žฅ ์ตœ์‹  ๋ฆฌ๋ทฐ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋„๋ก ์ˆ˜์ •

* refactor: eqaulsAndHashCode ์žฌ์ •์˜

* refactor: eqaulsAndHashCode ์žฌ์žฌ์ •์˜

* refactor: API Docs ๋ฐ˜์˜

---------

Co-authored-by: donghoony <[email protected]>

* fix: ์ž˜๋ชป ์ •์˜๋œ endpoint ์ˆ˜์ • (#118)

* [FE] ๋จธ์ง€๋กœ ์ธํ•ด ์‚ฌ๋ผ์ง„ ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ ๋ณต๊ตฌ ๋ฐ ๋ฐ์ดํ„ฐ ํƒ€์ž… ๋ณ€๊ฒฝ (#121)

* refactor: ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€ ๋ฐ์ดํ„ฐ ํƒ€์ž… ๋ณ€๊ฒฝ ๋ฐ Keyword ํƒ€์ž… ๋ณต๊ตฌ

* fix: ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€์˜ path ๋ณต๊ตฌ

* fix: ์‚ฌ์ด๋“œ๋ฐ”์˜ ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€ ๊ฒฝ๋กœ ๋ณต๊ตฌ

* refactor: ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€ ๋ฐ์ดํ„ฐ ํƒ€์ž… ๋ณ€๊ฒฝ์— ๋”ฐ๋ฅธ ๋ชฉ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ

* fix: DetailedReviewPage ๋ณต๊ตฌ ๋ฐ ๋ฐ์ดํ„ฐ ํƒ€์ž… ๋ณ€๊ฒฝ์— ๋”ฐ๋ฅธ ์ˆ˜์ •

* [BE] ๋”๋ฏธ ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€, local ํ”„๋กœํŒŒ์ผ ๊ด€๋ฆฌ (#123)

* refactor: Unauthorized ์˜ˆ์™ธ ์ฒ˜๋ฆฌ

* chore: ๋”๋ฏธ ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€ ๋ฐ Profile ์ฒ˜๋ฆฌ

* chore: ํ…Œ์ŠคํŠธ yml ์ƒ์„ฑ

* fix: Long notblank -> notnull (#126)

* [FE] ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํŽ˜์ด์ง€์—์„œ msw๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจํ‚น (#124)

* feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํŽ˜์ด์ง€์—์„œ msw๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจํ‚น

Co-Authored-By: badahertz52 <[email protected]>
Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: Fe <[email protected]>

* chore: ์—”๋“œํฌ์ธํŠธ baseurl์— '/' ์ถ”๊ฐ€

Co-Authored-By: badahertz52 <[email protected]>
Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: Fe <[email protected]>

---------

Co-authored-by: badahertz52 <[email protected]>
Co-authored-by: ImxYJL <[email protected]>
Co-authored-by: Fe <[email protected]>

* fix: ๋ฆฌ๋ทฐ ๋ชฉ๋ก DTO ํ•„๋“œ ์ˆ˜์ • (#129)

* [FE] msw ๋ชจํ‚น์„ ์œ„ํ•œ ๋ฆฌ๋ทฐ ๋ฐ์ดํ„ฐ ํ•˜๋“œ์ฝ”๋”ฉ (#130)

* refactor: msw ๋ชจํ‚น์„ ์œ„ํ•œ ๋ฆฌ๋ทฐ ๋ฐ์ดํ„ฐ ํ•˜๋“œ์ฝ”๋”ฉ

Co-Authored-By: ImxYJL <[email protected]>

* refactor: 2์ฐจ ๋ฐ๋ชจ๋ฐ์ด๋ฅผ ์œ„ํ•œ ๋ฉค๋ฒ„ ์•„์ด๋”” ์ƒ์ˆ˜ํ™”

Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: badahertz52 <[email protected]>
Co-Authored-By: Fe <[email protected]>

* chore: ๋ถˆํ•„์š”ํ•œ ์ฝ˜์†” ๋กœ๊ทธ ์ œ๊ฑฐ

Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: badahertz52 <[email protected]>
Co-Authored-By: Fe <[email protected]>

---------

Co-authored-by: ImxYJL <[email protected]>
Co-authored-by: badahertz52 <[email protected]>
Co-authored-by: Fe <[email protected]>

* [FE] endPoint ์˜ค๋ฅ˜์™€ ๋ฆฌ๋ทฐ ๊ทธ๋ฃน ์•„์ด๋”” ์ˆ˜์ • (#132)

* fix: endpoint ์˜ค๋ฅ˜ ์ˆ˜์ •

* fix: ๋ฆฌ๋ทฐ ์ƒ์„ฑ์„ ์œ„ํ•œ ๋ฐ์ดํ„ฐ ๋ฐ›์„ ๋•Œ์˜ ๋ฆฌ๋ทฐ ๊ทธ๋ฃน ์•„์ด๋””๋ฅผ 1๋กœ ์ˆ˜์ •

* [BE] fix: ๋ฆฌ๋ทฐ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ ์ƒ์„ฑ ๊ธฐ๋Šฅ ์ˆ˜์ • (#134)

* fix: src/index.tsx์—์„œ enableMocking ์ œ๊ฑฐ (#136)

* [FE] Children ์†์„ฑ์ด ํ•„์ˆ˜์ธ ํƒ€์ž… ์ œ์ž‘ (#147)

* feat: children ์†์„ฑ์ด ํ•„์ˆ˜์ธ EssentialPropsWithChildren ํƒ€์ž… ์ƒ์„ฑ

* chore: types ํด๋”์˜ index ํŒŒ์ผ์— ๋ˆ„๋ฝ๋๋˜ export๋“ค ์ถ”๊ฐ€ ๋ฐ ๊ทธ์— ๋”ฐ๋ฅธ types import๋ฌธ ๊ฒฝ๋กœ ์ˆ˜์ •

* [FE] ์‚ฌ์ด๋“œ๋ฐ” ๋ฐ ๋ชจ๋‹ฌ ์‚ฌ์šฉ์„ฑ ๊ฐœ์„  (#139)

* refactor: ์‚ฌ์ด๋“œ๋ฐ”๋ฅผ ๋‹ซ๋Š” ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ œ๊ฑฐ

* refactor: ์‚ฌ์ด๋“œ๋ฐ”๊ฐ€ ๋” ๋นจ๋ฆฌ ์—ด๋ฆฌ๋„๋ก ์ˆ˜์ •

* feat: ๋ชจ๋‹ฌ์˜ ๋ฐฐ๊ฒฝ ํด๋ฆญ ๋ฐ esc ํ‚ค๋ฅผ ๋ˆŒ๋ €์„ ๋•Œ ๋ชจ๋‹ฌ์ด ๋‹ซํžˆ๋Š” ๊ธฐ๋Šฅ ์ถ”๊ฐ€

* chore: hooks index์— useModalClose ์ถ”๊ฐ€

* feat: ์‚ฌ์ด๋“œ๋ฐ” ๋ฆฌ์ŠคํŠธ ์•„์ดํ…œ์„ ํด๋ฆญํ–ˆ์„ ๋•Œ ์‚ฌ์ด๋“œ๋ฐ”๊ฐ€ ๋‹ซํžˆ๋Š” ๊ธฐ๋Šฅ ์ถ”๊ฐ€

* refactor: useModalClose ํ›…์„ ๋ชจ๋“  ๋ชจ๋‹ฌ์˜ ๊ณตํ†ต ์ตœ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ์ธ ModalBackground์—์„œ ์ฒ˜๋ฆฌํ•˜๋„๋ก ์ˆ˜์ •

* refactor: ModalBackground๋ฅผ ํด๋ฆญํ–ˆ์„ ๋•Œ ๋ชจ๋‹ฌ์ด ๋‹ซํžˆ๊ฒŒ ํ•˜๋Š” ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ๋ฅผ document ๋Œ€์‹  Background์— ์ถ”๊ฐ€

* fix: esc๋ฅผ ์‚ฌ์šฉํ•ด ๋ชจ๋‹ฌ์„ ๋‹ซ์•˜์„ ๋•Œ ํ–„๋ฒ„๊ฑฐ ๋ฒ„ํŠผ์— ํฌ์ปค์Šค๊ฐ€ ์ƒ๊ธฐ๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ ๋ฐ ๋ณ€์ˆ˜๋ช… ๋Œ€์†Œ๋ฌธ์ž ์ˆ˜์ •

* refactor: useEffect ๋‚ด๋ถ€ ํ•จ์ˆ˜๋“ค์„ ํ›… ์™ธ๋ถ€๋กœ ์ด๋™ ๋ฐ ์ฃผ์„ ์ถ”๊ฐ€

* [FE] ์กด์žฌํ•˜์ง€ ์•Š๋Š” element์— ๋Œ€ํ•œ ์—๋Ÿฌ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ์œ ํ‹ธ๋ฆฌํ‹ฐ ํ•จ์ˆ˜ ์ œ์ž‘ (#150)

* feat: ์กด์žฌํ•˜์ง€ ์•Š๋Š” element์— ๋Œ€ํ•œ ์—๋Ÿฌ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ํ›… ์ œ์ž‘

* chore: hooks ํด๋” index์— useExistentElement ์ถ”๊ฐ€

* refactor: useExistentElement ํ›…์„ ๋”์šฑ ๋ฒ”์šฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ˆ˜์ •

* refactor: ์กด์žฌํ•˜์ง€ ์•Š๋Š” ์š”์†Œ๋ฅผ ํŒ๋ณ„ํ•˜๋Š” ๋™์ž‘์„ ์ปค์Šคํ…€ ํ›… ๋Œ€์‹  ์œ ํ‹ธ๋ฆฌํ‹ฐ ํ•จ์ˆ˜๋กœ ์ œ์ž‘

* chore: ๊ธฐ์กด์˜ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ์š”์†Œ๋ฅผ ํƒ์ง€ํ•˜๋Š” ์ปค์Šคํ…€ ํ›… ์‚ญ์ œ

* [FE] HTTP ์š”์ฒญ ์˜ค๋ฅ˜ ์‹œ status code๋ณ„ ์˜ค๋ฅ˜ ์ƒํ™ฉ์„ ๋Œ€์‘ํ•˜๋Š” ํ•จ์ˆ˜ ์ƒ์„ฑ (#151)

* feat: api ์—๋Ÿฌ ์‹œ ํ‘œ์‹œํ•œ ๋ฉ”์„ธ์ง€ ์ƒ์„ฑ ํ•จ์ˆ˜ ์ถ”๊ฐ€

* refactor: api/review.ts์— api ์˜ค๋ฅ˜ ์‹œ ๋ฉ”์„ธ์ง€๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” createApiErrorMessage ํ•จ์ˆ˜ ์ ์šฉ

* docs: http ์š”์ฒญ ์‹คํŒจ ๋ฉ”์„ธ์ง€ ์ˆ˜์ •

* fix: ์˜คํƒ€ ์ˆ˜์ •

* [FE] ํŽ˜์ด์ง€ ์ƒ๋‹จ ์ด๋™ ๋ฒ„ํŠผ ๊ตฌํ˜„ (#153)

* feat: top button ๋กœ์ง ํ›…์œผ๋กœ ๊ตฌํ˜„

* design: top button UI ๊ตฌํ˜„

* chore: ๊ฐ ํŽ˜์ด์ง€๋งˆ๋‹ค top button์ด ๋ณด์—ฌ์ง€๋„๋ก ์„ค์ •

* chore: ์ปดํฌ๋„ŒํŠธ default๋กœ exportํ•˜๋„๋ก ์„ค์ •

* refactor: handler๋ฅผ useEffect ์™ธ๋ถ€๋กœ ๋ถ„๋ฆฌ

* chore: svg import ์ปจ๋ฒค์…˜์— ๋งž์ถ”์–ด ์ด๋ฆ„ ์ˆ˜์ •

* [FE] feat: ์—๋Ÿฌ, ๋กœ๋”ฉ ํŽ˜์ด์ง€ ๊ตฌํ˜„ ๋ฐ ์ ์šฉ (#155)

* feat: ๋ฒ„ํŠผ ์ปดํฌ๋„ŒํŠธ์— ์•„์ด์ฝ˜์„ ์„ ํƒ์ ์œผ๋กœ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ณ€๊ฒฝ

- `icon` prop์„ ํ†ตํ•ด ๋ฒ„ํŠผ์— ์•„์ด์ฝ˜์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ณ€๊ฒฝ

* feat: ์—๋Ÿฌ ํŽ˜์ด์ง€๋ฅผ ์œ„ํ•œ ErrorSection ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„

- ์—๋Ÿฌ ๋กœ๊ณ , ๋ฉ”์‹œ์ง€, ์ƒˆ๋กœ๊ณ ์นจ ๋ฐ ํ™ˆ ์ด๋™ ๋ฒ„ํŠผ ์ œ๊ณต

* feat: ๋ผ์šฐํ„ฐ ์„ค์ •์—์„œ `errorElement`์— `ErrorPage` ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ถ”๊ฐ€

* feat: ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ ์ƒˆ๋กœ๊ณ ์นจ ๋ฐ ํ™ˆ ์ด๋™ ๊ธฐ๋Šฅ ์ถ”๊ฐ€

* feat: LoadingBar ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„

* feat: ๋กœ๋”ฉ ํŽ˜์ด์ง€ ์ถ”๊ฐ€ ๋ฐ ์ ์šฉ

- ๋กœ๋”ฉ ๋ฉ”์‹œ์ง€ ์ถ”๊ฐ€
- ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํŽ˜์ด์ง€, ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํŽ˜์ด์ง€, ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€์— ๋กœ๋”ฉ ํŽ˜์ด์ง€ ์ ์šฉ

* refactor: buttons ๋ฐฐ์—ด์„ ํ†ตํ•ด ๋ฒ„ํŠผ ์ƒ์„ฑ

* refactor: ์ฝ”๋“œ์ปจ๋ฒค์…˜์— ๋งž๊ฒŒ ์ฝ”๋“œ ์ˆ˜์ • ๋ฐ imageDescription์„ ๋ฒ„ํŠผ props์— ์ถ”๊ฐ€

* refactor: boolean ํƒ€์ž…์ถ”๋ก  ์ œ๊ฑฐ

* design: ์—๋Ÿฌ ์ปดํฌ๋„ŒํŠธ ํ™”๋ฉด ๊ฐ€์šด๋ฐ ๋ฐฐ์น˜

* design: ๋กœ๋”ฉ ์ปดํฌ๋„ŒํŠธ ํ™”๋ฉด ๊ฐ€์šด๋ฐ ๋ฐฐ์น˜

* [BE] refactor: ๋„๋ฉ”์ธ ์—ฐ๊ด€ ๊ด€๊ณ„ ์žฌ์ •์˜ (#156)

* refactor: ๋„๋ฉ”์ธ ์—ฐ๊ด€๊ด€๊ณ„ ์žฌ์ •์˜ ๋ฐ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋„๋ฉ”์ธ ์‚ญ์ œ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* test: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํ…Œ์ŠคํŠธ ์‚ญ์ œ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* fix: ์˜ˆ์•ฝ์–ด ์‚ฌ์šฉํ•˜์ง€ ์•Š๋„๋ก ์ˆ˜์ •

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* refactor: Review ๋„๋ฉ”์ธ์—์„œ reviewee ํ•„๋“œ ์ œ๊ฑฐ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* refactor: ๋ฆฌ๋ทฐ ์ €์žฅ ๊ธฐ๋Šฅ ๊ตฌํ˜„

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* refactor: ํ‚ค์›Œ๋“œ ์ €์žฅ ๊ธฐ๋Šฅ ๊ตฌํ˜„

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* refactor: ๋ฆฌ๋ทฐ ์ƒ์„ฑ ์š”์ฒญ ๊ฐ์ฒด ๊ตฌํ˜„

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* test: ๋ฆฌ๋ทฐ, ๋ฆฌ๋ทฐ ๋‚ด์šฉ ๋„๋ฉ”์ธ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* refactor: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ์‹œ ์งˆ๋ฌธ ๊ฒ€์ฆ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* fix: Review์˜ reviewGroupId ์ปฌ๋Ÿผ๋ช… ์ˆ˜์ •

* refactor: ๋ฆฌ๋ทฐ ์ƒ์„ฑ ์‹œ, ํ‚ค์›Œ๋“œ ๊ฒ€์ฆ์„ ๊ฐ์ฒด ๋ถ„๋ฆฌ

* refactor: ๋ฆฌ๋ทฐ ์ƒ์„ฑ ์‹œ, ์งˆ๋ฌธ ๊ฒ€์ฆ์„ ๊ฐ์ฒด ๋ถ„๋ฆฌ

* style: ์ฝ”๋“œ ์žฌ์ •๋ ฌ

* test: ๋ฆฌ๋ทฐ ์ƒ์„ฑ ๊ฒ€์ฆ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

* refactor: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํด๋ž˜์Šค ์‚ญ์ œ

* refactor: keyword ๊ด€๋ จ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํด๋ž˜์Šค ์‚ญ์ œ

* refactor: review ๊ด€๋ จ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํด๋ž˜์Šค ์‚ญ์ œ

* refactor: ๋ฐ์ดํ„ฐ ์ดˆ๊ธฐํ™” ๊ฐ์ฒด ์ˆ˜์ •

* test: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํ…Œ์ŠคํŠธ ์‚ญ์ œ

* refactor: ์˜ˆ์™ธ ๋ฉ”์„ธ์ง€ ๋งํˆฌ ํ†ต์ผ

* refactor: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์˜ˆ์™ธ ์ œ๊ฑฐ

* refactor: ์˜ˆ์™ธ ํด๋ž˜์Šค ํŒจํ‚ค์ง€ ๋ณ€๊ฒฝ

* refactor: NOT NULL ์ œ์•ฝ์กฐ๊ฑด ์ถ”๊ฐ€

* refactor: ํ…Œ์ŠคํŠธ์—์„œ๋งŒ ์‚ฌ์šฉ๋˜๋Š” ํ•จ์ˆ˜ ์ œ๊ฑฐ

* refactor: ํ…Œ์ŠคํŠธ ์‹คํ–‰ ์‹œ ๋ฐœ์ƒํ•˜๋Š” LazyInitializationException ํ•ด๊ฒฐ

* refactor: ํ‚ค์›Œ๋“œ ๊ฒ€์ฆ ํ•จ์ˆ˜ ์ˆœ์„œ ๋ณ€๊ฒฝ

* chore: ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ปจ๋ฒค์…˜ ํ†ต์ผ

* refactor: reviewRequestCode ๊ฒ€์ฆ ๋กœ์ง ์ด๋™

* refactor: ํ•„๋“œ์ธ questionRepository๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ๋ณ€๊ฒฝ

* refactor: ๋ฆฌ๋ทฐ์ด, ํ”„๋กœ์ ํŠธ ์ด๋ฆ„ ๊ธธ์ด ๊ฒ€์ฆ ํ•จ์ˆ˜ ๋ถ„๋ฆฌ

* test: ๋ฆฌ๋ทฐ ์ €์žฅ ์‹œ reviewKeywor ์ €์žฅ ๊ฒ€์ฆ ์ถ”๊ฐ€

---------

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>

* [All] infra: ๋””์Šค์ฝ”๋“œ ์›นํ›… ์‚ฌ์šฉํ•ด PR ์ƒ์„ฑ/์ฝ”๋ฉ˜ํŠธ ์‹œ ๋ฉ˜์…˜ (#169)

* feat: PR Request ์ƒ์„ฑ / Comment ์‹œ ๋””์Šค์ฝ”๋“œ ๋ฉ˜์…˜

* fix: Case-sensitive ID๋กœ ํ•ด๊ฒฐ, ALL webhook ์ถ”๊ฐ€

* fix: remove whitespace

* chore: rename workflow

* fix: fix shell script

* fix: step statement

* fix: remove trailing whitespace after equals sign

* [BE] feat: ๋ฆฌ๋ทฐ ๊ทธ๋ฃน ์ƒ์„ฑ API ๊ตฌํ˜„ (#163)

* feat: ๋žœ๋คํ•œ ๋ฌธ์ž์—ด ์ƒ์„ฑ๊ธฐ ๊ตฌํ˜„

Co-authored-by: donghoony <[email protected]>

* feat: ๋ฆฌ๋ทฐ ๊ทธ๋ฃน ์ƒ์„ฑ ์š”์ฒญ, ์‘๋‹ต ํ˜•์‹

Co-authored-by: donghoony <[email protected]>

* feat: ๋ฆฌ๋ทฐ ๊ทธ๋ฃน ์ƒ์„ฑ

Co-authored-by: hyeonjilee <[email protected]>
Co-authored-by: nayonsoso <[email protected]>

* feat: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ์ปจํŠธ๋กค๋Ÿฌ

Co-authored-by: hyeonjilee <[email protected]>
Co-authored-by: nayonsoso <[email protected]>

---------

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* [BE] refactor: ๋ฆฌ๋ทฐ ์ž‘์„ฑ์„ ์œ„ํ•œ ์ •๋ณด ์š”์ฒญ ๊ธฐ๋Šฅ ๋ฆฌํŒฉํ„ฐ๋ง (#162)

* refactor: ๋ถˆํ•„์š”ํ•œ update ๋ฐฉ์ง€

* feat: controller์— ๋ฆฌ๋ทฐ ์ƒ์„ฑ ์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต ๊ธฐ๋Šฅ ๊ตฌํ˜„

* feat: controller์— ๋ฆฌ๋ทฐ ์ž‘์„ฑ์„ ์œ„ํ•ด ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์‘๋‹ต ๊ธฐ๋Šฅ ๊ตฌํ˜„

* feat: service์— ๋ฆฌ๋ทฐ ์ž‘์„ฑ์„ ์œ„ํ•ด ํ•„์š”ํ•œ ์ •๋ณด ์กฐํšŒ
 ๊ธฐ๋Šฅ ๊ตฌํ˜„

* chore: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” dto ์‚ญ์ œ

* test: ๋ฆฌ๋ทฐ ๋ฆฌ๋ทฐ ์ž‘์„ฑ์„ ์œ„ํ•ด ํ•„์š”ํ•œ ์ •๋ณด ์กฐํšŒ ๊ธฐ๋Šฅ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ

* refactor: swagger ์„ค์ • ์ผ๋ถ€ ์ˆ˜์ • ๋ฐ ์—๋Ÿฌ ์‘๋‹ต์ฝ”๋“œ ๋…ธ์ถœ๋˜๋„๋ก ๋ณ€๊ฒฝ

* refactor: service์—์„œ ์›์‹œํƒ€์ž… long์„ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ๋ณ€๊ฒฝ

* docs: api ๋ฌธ์„œ dto ํ•ญ๋ชฉ์„ค๋ช… ๋ณ€๊ฒฝ

* test: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ณ€์ˆ˜ ์„ ์–ธํ•˜์ง€ ์•Š๋„๋ก ๋ณ€๊ฒฝ

* docs: api ๋ฌธ์„œ ๊ฒ€์ฆ ๋‚ด์šฉ์— ๋Œ€ํ•œ ์–ด์ฒด ๋ณ€๊ฒฝ

* refactor: ํŠธ๋žœ์žญ์…˜ ์กฐํšŒ ๋ช…์‹œ ์ถ”๊ฐ€

* refactor: dto ์ด๋ฆ„ ๋ณ€๊ฒฝ

* [FE] ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€์— react-query ์ถ”๊ฐ€ ๋ฐ ๋ฆฌํŒฉํ† ๋ง (#161)

* fix: src/index.tsx์—์„œ enableMocking ์ œ๊ฑฐ

* feat: ๋ฆฌ๋ทฐ ๊ทธ๋ฃน ์ƒ์„ฑ ์‹œ ์ฝ”๋ฉ˜ํŠธ ์ปดํฌ๋„ŒํŠธ๋ช… ๋ณ€๊ฒฝ ๋ฐ ๊ธฐ๋ณธ๊ฐ’ ์„ค์ •

- ์ปดํฌ๋„ŒํŠธ๋ช… ๋ณ€๊ฒฝ: RevewComment -> ReveweeComments
-  reviewGroup์˜ description์ด ๋นˆ๋ฌธ์ž์—ด์ด๋ฉด ๊ธฐ๋ณธ๊ฐ’์„ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒƒ์œผ๋กœ ๋ณ€๊ฒฝ

* refactor: ์„œ๋ฒ„ DB์— ์žˆ๋Š” ๋ฆฌ๋ทฐ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ์ƒ์ˆ˜ํ™”

- ํ˜„์žฌ DB์— ์žˆ๋Š” ๋ฆฌ๋ทฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชฉ ์„œ๋ฒ„์—์„œ๋„ ์‚ฌ์šฉํ•˜๊ณ , ์‚ฌ์ด๋“œ๋ฐ” ํŽ˜์ด์ง€ ์ด๋™ ์‹œ์—๋„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ด€๋ จ value๋“ค์„ ์ƒ์ˆ˜ํ™” ํ•จ

* feat : QueryClient, QueryClientProvider ์ ์šฉ

- src/index.tsx์— QueryClient, QueryClientProvider ์ ์šฉ

* fix: dependencies์— ์žˆ๋Š” ํ…Œ์ŠคํŠธ ํŒจํ‚ค์ง€๋“ค์„ devDependencies๋กœ ์˜ฎ๊น€

* feat: ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€์— react-query ์ ์šฉ

* feat : msw์— ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€ 404 ์˜ค๋ฅ˜ ์ถ”๊ฐ€

* ci: react-error-boundary ์„ค์น˜

* feat: Outlet์— QueryErrorResetBoundary,ErrorBoundary, Suspense ์ ์šฉ

* feat: ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€์— useSuspenseQuery ์ ์šฉ

* refactor: ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€ resource, queryString key ์ƒ์ˆ˜ํ™”

* refactor:  ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€ react-query key ์ƒ์ˆ˜ํ™”

* refactor: ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€ ์ปดํฌ๋„ŒํŠธ ์†์—์„œ๋งŒ ์‚ฌ์šฉํ•˜๋Š” ์ƒ์ˆ˜๋“ค ์ƒ์ˆ˜ํ™”

* refactor: DetailedReviewPage/components์— index.tsx๋ฅผ ์ถ”๊ฐ€ํ•ด import ๊ฒฝ๋กœ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ˆ˜์ •

* feat: error ์ „ํŒŒ๋ฅผ ์œ„ํ•œ QueryClient ์˜ต์…˜ ์ถ”๊ฐ€

-  react-query์˜ query, mutation์—์„œ error๊ฐ€ ์ „ํŒŒ๋˜๋„๋ก QueryClient ์˜ต์…˜ ์„ค์ •

* fix: ErrorPage์˜ SideModal์— closeModal props๋กœ ์คŒ

* refactor: ErrorSection ์œ„์น˜ ๋ณ€๊ฒฝ(src/pages/ErrorPage -> src/components/error)

* feat: ErrorFallback ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ

* feat: ErrorSuspenseContainer ์ƒ์„ฑ ๋ฐ App.tsx์— ์ ์šฉ

* chore: constants/index.ts export ๊ฒฝ๋กœ ๋ณ€๊ฒฝ

- ์ค‘๋ณต๋˜๋Š” apiErrorMessage ์‚ญ์ œ
- queryKeys ์ถ”๊ฐ€

* chore: 3์ฐจ-1์ฃผ์ฐจ ํ•ต์‹ฌ ๊ธฐ๋Šฅ ์‹œํ˜„ ๋•Œ ํ•„์š” ์—†๋Š” ์ฝ”๋“œ ์ฃผ์„ ์ฒ˜๋ฆฌ

* docs: ErrorPage์˜ ERROR_MESSAGE ์ˆ˜์ •

* design: formWidth ๋ณ€๊ฒฝ ๋ฐ fontSize์— 1.4rem ์ถ”๊ฐ€

* feat: ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€์— ๋ฆฌ๋ทฐ์ด ์ด๋ฆ„ ์ถ”๊ฐ€

- ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€ ๋ชฉ๋ฐ์ดํ„ฐ, ๋ฐ์ดํ„ฐ ํƒ€์ž…์— ๋ฆฌ๋ทฐ์ด ์ด๋ฆ„ ์ถ”๊ฐ€
- ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€ ์ปดํฌ๋„ŒํŠธ์— ๋ฆฌ๋ทฐ์ด ์ด๋ฆ„ ์ถ”๊ฐ€ ๋ฐ ๊ด€๋ จ ์Šคํƒ€์ผ ์ถ”๊ฐ€

* refactor: ๋ถˆํ•„์š”ํ•œ export ์‚ญ์ œ

* chore: type๋ช… ์ˆ˜์ • (RevieweeCommentProps =>RevieweeCommentsProps)

* refactor: ErrorSection์œผl Button ์ˆ˜์ •

* refactor: ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€ ๋ฐ์ดํ„ฐ ํƒ€์ž… ๋ณ€๊ฒฝ์— ๋”ฐ๋ฅธ ์ˆ˜์ •

* refactor: ErrorSuspenseContainer ์ ์šฉ ์œ„์น˜ ๋ณ€๊ฒฝ

- App๊ฐ€ ์•„๋‹Œ router์˜ element์—์„œ ์ ์šฉํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณ€๊ฒฝ

* refactor: ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€ ๋ฐ์ดํ„ฐ ํƒ€์ž… ๊ฐ•์ œ ๋ฐฉ๋ฒ• ๋ณ€๊ฒฝ

* chore: ๋ถˆํ•„์š”ํ•œ ์ฃผ์„ ์‚ญ์ œ

* refactor: ErrorSection์˜ buttons ๋„ค์ด๋ฐ ๋ณ€๊ฒฝ ๋ฐ ์š”์†Œ์— key ์ถ”๊ฐ€

- buttons -> buttonList

* chore: ์Šคํƒ€์ผ ์ฃผ์„์— NOTE ์ถ”๊ฐ€

* [BE] feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ์กฐํšŒ  (#179)

* feat: ๋ฆฌ๋ทฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ

Co-authored-by: nayonsoso <[email protected]>

* feat: ๋‚ด๊ฐ€ ๋ฐ›์€ ๋ฆฌ๋ทฐ ๋ชฉ๋ก ์‘๋‹ต ์ƒ์„ฑ

Co-authored-by: donghoony <[email protected]>

* feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ์กฐํšŒ

Co-authored-by: nayonsoso <[email protected]>

* refactor: Cascade ์ ์šฉ์œผ๋กœ ๋ถˆํ•„์š”ํ•œ save ์ œ๊ฑฐ

Co-authored-by: nayonsoso <[email protected]>

* refactor: ๋ฆฌ๋ทฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์ƒ์„ฑ ๊ฐ์ฒด ๋„์ถœ

Co-authored-by: nayonsoso <[email protected]>

---------

Co-authored-by: nayonsoso <[email protected]>

* fix: ๋ธŒ๋ผ์šฐ์ € ํƒ€์ดํ‹€ ์˜คํƒ€ ์ˆ˜์ • (#167)

* [BE] feat: ๋ฆฌ๋ทฐ ์ƒ์„ธ ์กฐํšŒ ๊ธฐ๋Šฅ ๊ตฌํ˜„ (#182)

* feat: ์ปจํŠธ๋กค๋Ÿฌ ๋ฆฌ๋ทฐ
์ƒ์„ธ ์กฐํšŒ api ์‘๋‹ต ๊ธฐ๋Šฅ ๊ตฌํ˜„

* feat: ๋ฆฌ๋ทฐ ์ƒ์„ธ ์กฐํšŒ api ์‘๋‹ต ๊ฐ์ฒด ๊ตฌํ˜„

* refactor: ๋ฆฌ๋ทฐ ์ƒ์„ธ ์กฐํšŒ api ์‘๋‹ต ๊ฐ์ฒด๋ช… ๋ณ€๊ฒฝ

* feat: ์„œ๋น„์Šค ๋ฆฌ๋ทฐ ์ƒ์„ธ ์กฐํšŒ ๊ธฐ๋Šฅ ๊ตฌํ˜„

* test: ๋ฆฌ๋ทฐ ์ƒ์„ธ ์กฐํšŒ ๊ธฐ๋Šฅ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

* style: ์˜คํƒ€ ๋ฐ ๊ฐœํ–‰ ์ˆ˜์ •

* refactor: ๋‚ ์งœ ์‘๋‹ต ์‹œ, ์ผ์ž๊นŒ์ง€๋งŒ ์‘๋‹ตํ•˜๋„๋ก ๋ณ€๊ฒฝ

* refactor: ๋ฆฌ๋ทฐ ์กฐํšŒ ๊ถŒํ•œ ๊ฒ€์ฆ ๋กœ์ง์„ repository ์‚ฌ์šฉํ•˜๋„๋ก ๋ณ€๊ฒฝ

* refactor: ๊ฒ€์ฆ๋ฉ”์„ธ์ง€ ๋ณ€๊ฒฝ

* refactor: ๋ฆฌ๋ทฐ ์„œ๋น„์Šค์—์„œ ๋ฆฌ๋ทฐ ๊ทธ๋ฃน์„ ์ฐพ์„ ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ์˜ˆ์™ธ ํด๋ž˜์Šค ๋ณ€๊ฒฝ

* refactor: ๋ฆฌ๋ทฐ ์ƒ์„ธ ์กฐํšŒ ๋ฉ”์„œ๋“œ๋ช… ๋ณ€๊ฒฝ

* refactor: ํ—ค๋”๋ช… ์ƒ์ˆ˜ํ™”

* [FE] recoil์„ ํ†ตํ•œ groupAccessCode ์ „์—ญ ์ƒํƒœ ๊ด€๋ฆฌ (#180)

* ci: recoil ์„ค์น˜

* feat: src/index.ts์— RecoilRoot ์ ์šฉ

* feat: groupAccessCode ์— ๋Œ€ํ•œ atom ์ƒํƒœ ์ถ”๊ฐ€

* feat: useGroupAccessCode ํ›… ์ถ”๊ฐ€

- useGroupAccessCode : groupAccessCode์˜ atom ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ํ›…

* [BE] ๋‚ด๊ฐ€ ๋ฐ›์€ ๋ฆฌ๋ทฐ ๋ชฉ๋ก์„ ์ตœ์‹ ์ˆœ์œผ๋กœ ์กฐํšŒํ•œ๋‹ค. (#189)

* fix: ๋‚ ์งœ ์ˆœ ์ •๋ ฌ

* refactor: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ณ€์ˆ˜ ์ œ๊ฑฐ

---------

Co-authored-by: donghoony <[email protected]>

* [BE] ์ดˆ๊ธฐ ๋ฐ์ดํ„ฐ ์„ค์ • (#187)

* feat: ์ดˆ๊ธฐ ๋ฐ์ดํ„ฐ ์„ค์ •

* build: CD ์‹œ local profile ์„ค์ •

---------

Co-authored-by: donghoony <[email protected]>

* [FE] feat: Alert Modal๊ณผ Error Alert Modal ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„ ๋ฐ Button ์ปดํฌ๋„ŒํŠธ ํ™•์žฅ (#165)

* refactor: ๊ณตํ†ต ๋ฒ„ํŠผ ์ปดํฌ๋„ŒํŠธ๊ฐ€ children๊ณผ style์„ ๋ฐ›๋„๋ก ์ˆ˜์ •

* chore: error alert modal์—์„œ ์‚ฌ์šฉํ•  primary ์ƒ‰์ƒ์˜ ๊ฒฝ๊ณ  ์‚ผ๊ฐํ˜• ์ถ”๊ฐ€

* feat: ErrorAlertModal ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„

* feat: AlertModal ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„

* chore: ๋ณ€๊ฒฝ๋œ Button ์ปดํฌ๋„ŒํŠธ์˜ ๊ตฌ์กฐ์— ๋งž๊ฒŒ ์ฝ”๋“œ ์ˆ˜์ •

* fix: AlertModal์ด Esc ๋˜๋Š” background์˜ ํด๋ฆญ์œผ๋กœ ๋‹ซํžˆ์ง€ ์•Š๋„๋ก ์ˆ˜์ •

* chore: AlertModal๊ณผ ErrorAlertModal export

* refactor: Button ์ปดํฌ๋„ŒํŠธ๊ฐ€ type์„ ๋ณ„๋„๋กœ ๋ฐ›๋„๋ก ์ˆ˜์ • ๋ฐ ๊ธฐ์กด์˜ buttonType์„ styleType์œผ๋กœ ๋ณ€๊ฒฝ

* refactor: background ํด๋ฆญ ๋˜๋Š” Esc ํ‚ค๋ฅผ ํ†ตํ•ด ๋ชจ๋‹ฌ์„ ๋‹ซ๋Š” ๊ฒƒ์„ ๋ถ„๋ฆฌ

* refactor: AlertModal์˜ ๋ชจ๋‹ฌ ๋‹ซ๋Š” ์ •์ฑ…์„ props๋กœ ์„ ํƒ ๊ฐ€๋Šฅํ•˜๋„๋ก ์ˆ˜์ •

* refactor: ErrorAlertModal์„ AlertModal์„ ์‚ฌ์šฉํ•ด ๊ตฌํ˜„

* refactor: ๋‹ซ๊ธฐ ๋ฒ„ํŠผ ์ด์™ธ์˜ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ชจ๋‹ฌ์„ ๋‹ซ์„ ์ˆ˜ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€์™€ handler๋ฅผ props๋กœ ์ „๋‹ฌ๋ฐ›๋„๋ก ๋ณ€๊ฒฝ

* refactor: ๋น„์–ด์žˆ๋Š” ์Šคํƒ€์ผ ์ปดํฌ๋„ŒํŠธ ์ œ๊ฑฐ

* [FE] ๋žœ๋”ฉ ํŽ˜์ด์ง€ ํผ๋ธ”๋ฆฌ์‹ฑ ๋ฐ ๋””๋ฐ”์šด์‹ฑ ํ•จ์ˆ˜ ์ถ”๊ฐ€ (#181)

* feat: Input ๊ณตํ†ต ์ปดํฌ๋„ŒํŠธ ์ œ์ž‘

* feat: LandingPage ์ œ์ž‘

* fix: Input์˜ type์„ text๋กœ ์ˆ˜์ •

* feat: debounce ํ•จ์ˆ˜ ์ž‘์„ฑ

* docs: debounce ํ•จ์ˆ˜์— TODO ์ฃผ์„ ๋ฐ TSdoc ์ถ”๊ฐ€ ์™ธ ๊ฐ„๋‹จํ•œ if๋ฌธ ๋ฆฌํŒฉํ† ๋ง

* chore: ์ž˜๋ชป๋œ ํŒŒ์ผ ๊ตฌ์กฐ ๋ฐ ๋””๋ ‰ํ† ๋ฆฌ๋ช… ์ˆ˜์ •

* chore: px์„ rem์œผ๋กœ ์ˆ˜์ •

* refactor: ๋™์  ์Šคํƒ€์ผ๋ง์— css ๋Œ€์‹  styled ์Šคํƒ€์ผ ์ ์šฉ

* refactor: Input ์Šคํƒ€์ผ์„ ๋”์šฑ ์œ ์—ฐํ•˜๊ฒŒ ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก ์ˆ˜์ •, ์Šคํƒ€์ผ ๋ฆฌํ„ฐ๋Ÿด ์ œ๊ฑฐ

* refactor: Input์— ์ ์šฉ๋œ ์ปค์Šคํ…€ ์Šคํƒ€์ผ๋ง์„ $style๋กœ ์ˆ˜์ •

* fix: undefined ๋ฆฌํ„ด์„ null ๋ฆฌํ„ด์œผ๋กœ ์ˆ˜์ •

* refactor: flex-direction์— ๋ณ„๋„์˜ ์ปค์Šคํ…€ ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹  React ๋‚ด์žฅ ํƒ€์ž…์„์‚ฌ์šฉํ•˜๋„๋ก ์ˆ˜์ •

* refactor: Input ์ปดํฌ๋„ŒํŠธ์—์„œ rest props ์ œ๊ฑฐ

* chore: ๋ถˆํ•„์š”ํ•œ import ์ œ๊ฑฐ

* [FE] feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํŽ˜์ด์ง€์— ๋ณ€๊ฒฝ๋œ API ์—ฐ๋™ ํ›„, ๋ฆฌ์•กํŠธ ์ฟผ๋ฆฌ ์ ์šฉ ๋ฐ ๋ฌดํ•œ ์Šคํฌ๋กค ๊ตฌํ˜„ (#192)

* design: ๋ฆฌ๋ทฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์นด๋“œ ๋ฐฐ๊ฒฝ์ƒ‰ ๋ณ€๊ฒฝ ๋ฐ ์ „์ฒด ๊ฐ์‹ธ๋Š” div์— ์•„๋ž˜์ชฝ ์—ฌ๋ฐฑ ์ถ”๊ฐ€

* refactor: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ์ธํ„ฐํŽ˜์ด์Šค ์ถ”๊ฐ€ ๋ฐ ์ˆ˜์ •

- ReviewPreviewList ์ธํ„ฐํŽ˜์ด์Šค ์ถ”๊ฐ€
  - size, lastReviewId, reviews ํ•„๋“œ ์ถ”๊ฐ€
- ReviewPreview ์ธํ„ฐํŽ˜์ด์Šค ์ˆ˜์ •
  - keywords ํ•„๋“œ๋ฅผ Keyword[] ํƒ€์ž…์œผ๋กœ ๋ณ€๊ฒฝ

* chore: ๋‹ซํžŒ ์ž๋ฌผ์‡ ๋กœ ์•„์ด์ฝ˜ ๋ณ€๊ฒฝ

* feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํŽ˜์ด์ง€์—์„œ ๋ฆฌ์•กํŠธ ์ฟผ๋ฆฌ ์ ์šฉ

* refactor: ์›น ์ ‘๊ทผ์„ฑ์„ ์œ„ํ•œ alt, aria-label ์ถ”๊ฐ€ ๋ฐ ์ฝ”๋“œ ์ปจ๋ฒค์…˜์— ๋งž์ถฐ ์ฝ”๋“œ ์ˆ˜์ •

* feat: ๋ฆฌ๋ทฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๋ฆฌ์ŠคํŠธ ํ•ธ๋“ค๋Ÿฌ์— ํŽ˜์ด์ง€๋„ค์ด์…˜ ๋กœ์ง ์ถ”๊ฐ€

- ๊ธฐ์กด์˜ ๋‹จ์ˆœ ๋ฐ˜ํ™˜ ํ•ธ๋“ค๋Ÿฌ์—์„œ ํŽ˜์ด์ง€๋„ค์ด์…˜ ๊ธฐ๋Šฅ์„ ํฌํ•จํ•œ ํ•ธ๋“ค๋Ÿฌ๋กœ ์ˆ˜์ •

* feat: `SideModal` ์ปดํฌ๋„ŒํŠธ์— `closeModal` prop ์ถ”๊ฐ€

* feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํŽ˜์ด์ง€์— ๋ฌดํ•œ ์Šคํฌ๋กค ๊ธฐ๋Šฅ ์ถ”๊ฐ€

* refactor: useReviewPreviewList ํ›… ์ƒ์„ฑํ•˜์—ฌ ๋ฐ์ดํ„ฐ ํ˜ธ์ถœ ๋กœ์ง ๋ถ„๋ฆฌ

* refactor: ๋ถˆํ•„์š”ํ•œ ButtonContainer ์ œ๊ฑฐ

* design: px์„ rem์œผ๋กœ ๋ณ€๊ฒฝ

* refactor: Button ์ปดํฌ๋„ŒํŠธ์— key ์ถ”๊ฐ€

* feat: ๋ฆฌ๋ทฐ์ด, ํ”„๋กœ์ ํŠธ๋ช…์„ ๋ณด์—ฌ์ฃผ๋Š” DescriptionSection ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„

* refactor: ๋ฆฌ๋ทฐ ๋ชฉ๋ก์„ ๋ถˆ๋Ÿฌ์˜ค๋Š” api ๋ณ€๊ฒฝ ์ด์Šˆ๋กœ ์ธํ•ด ์—”๋“œํฌ์ธํŠธ, fetch ํ•จ์ˆ˜ ์ˆ˜์ •

* chore: fragment ์ œ๊ฑฐ

* refactor: api ๋ณ€๊ฒฝ์— ๋”ฐ๋ผ ReviewPreviewList, ReviewPreview ์ธํ„ฐํŽ˜์ด์Šค ์ˆ˜์ •

* refactor: ๋ณ€๊ฒฝ๋œ api์— ๋”ฐ๋ผ props ์ˆ˜์ •

* refactor: reviewerGroup, isPublic ์ œ๊ฑฐ

* refactor: endPoint.gettingReviewList ํ˜ธ์ถœ ์ธ์ž ๋ณ€๊ฒฝ

* refactor: DescriptionSection์—์„œ ReviewInfoSection์œผ๋กœ ์ปดํฌ๋„ŒํŠธ๋ช… ๋ณ€๊ฒฝ

* refactor: useSuspenseQuery ์ ์šฉ ํ›„, ๋ฌดํ•œ์Šคํฌ๋กค ๊ด€๋ จ ์ฝ”๋“œ ์ฃผ์„ ์ฒ˜๋ฆฌ

---------

Co-authored-by: badahertz52 <[email protected]>

* [FE] feat: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํŽ˜์ด์ง€์™€ ์„œ๋ฒ„ ๋ฐ ๋ชจ๋‹ฌ ์—ฐ๋™ (#191)

* chore: ๋ณ€๊ฒฝ๋œ UI ์ ์šฉ

* design: ํ‚ค์›Œ๋“œ ๋ฌธํ•ญ ์•ˆ๋‚ด ๋ฌธ๊ตฌ ์ˆ˜์ •

* feat: Textarea ๊ณตํ†ต ์ปดํฌ๋„ŒํŠธ ๋ผˆ๋Œ€ ๊ตฌํ˜„

* chore: ์ˆ˜์ •๋œ api ์—”๋“œํฌ์ธํŠธ ๋ฐ queryparams ์ ์šฉ

* design: reset.ts ์ถ”๊ฐ€ ์„ค์ •

* chore: ๋ณ€๊ฒฝ๋œ api ๋ฌธ์„œ์— ๋งž๊ฒŒ ํƒ€์ž… ์ˆ˜์ •

* feat: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํŽ˜์ด์ง€์™€ ๋ชจ๋‹ฌ ๋ฐ ์„œ๋ฒ„ ์—ฐ๋™

* chore: ์‚ฌ์ด๋“œ๋ฐ” ๋ฉ”๋‰ด ํด๋ฆญ ์‹œ ์ด๋™ํ•  path ์ˆ˜์ •

* fix: ConfirmModal์—์„œ background ํด๋ฆญ ์‹œ ๋ชจ๋‹ฌ์ด ๋‹ซํžˆ์ง€ ์•Š๋Š” ํ˜„์ƒ ์ˆ˜์ •

* design: AlertModal ๋ฐ ErrorAlertModal ๋””์ž์ธ ์ˆ˜์ •

* chore: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ๋ฐ ์ž‘์„ฑ ์™„๋ฃŒ ํŽ˜์ด์ง€ ๋ผ์šฐํ„ฐ ์ถ”๊ฐ€

* chore: ๋ถˆํ•„์š”ํ•œ ์ฃผ์„ ์ œ๊ฑฐ ๋ฐ ์‚ฌ์ด๋“œ๋ฐ”์—์„œ ๋ฆฌ๋ทฐ ์ž‘์„ฑ ๋ฉ”๋‰ด ์ˆจ๊น€ ์ฒ˜๋ฆฌ

* chore: ๋ฆฌ๋ทฐ ์ œ์ถœ ํŽ˜์ด์ง€ ๋ฒ„ํŠผ ํƒ€์ž… ๋ช…์‹œ

* chore: svg import ์ปจ๋ฒค์…˜์— ๋งž๊ฒŒ ์ˆ˜์ •

* [FE] ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํŽ˜์ด์ง€, ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€์—์„œ ๋กœ๊ทธ์ธ์„ ์—ฐ๋™ (#193)

* design: ๋ฆฌ๋ทฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์นด๋“œ ๋ฐฐ๊ฒฝ์ƒ‰ ๋ณ€๊ฒฝ ๋ฐ ์ „์ฒด ๊ฐ์‹ธ๋Š” div์— ์•„๋ž˜์ชฝ ์—ฌ๋ฐฑ ์ถ”๊ฐ€

* refactor: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ์ธํ„ฐํŽ˜์ด์Šค ์ถ”๊ฐ€ ๋ฐ ์ˆ˜์ •

- ReviewPreviewList ์ธํ„ฐํŽ˜์ด์Šค ์ถ”๊ฐ€
  - size, lastReviewId, reviews ํ•„๋“œ ์ถ”๊ฐ€
- ReviewPreview ์ธํ„ฐํŽ˜์ด์Šค ์ˆ˜์ •
  - keywords ํ•„๋“œ๋ฅผ Keyword[] ํƒ€์ž…์œผ๋กœ ๋ณ€๊ฒฝ

* chore: ๋‹ซํžŒ ์ž๋ฌผ์‡ ๋กœ ์•„์ด์ฝ˜ ๋ณ€๊ฒฝ

* feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํŽ˜์ด์ง€์—์„œ ๋ฆฌ์•กํŠธ ์ฟผ๋ฆฌ ์ ์šฉ

* refactor: ์›น ์ ‘๊ทผ์„ฑ์„ ์œ„ํ•œ alt, aria-label ์ถ”๊ฐ€ ๋ฐ ์ฝ”๋“œ ์ปจ๋ฒค์…˜์— ๋งž์ถฐ ์ฝ”๋“œ ์ˆ˜์ •

* feat: ๋ฆฌ๋ทฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๋ฆฌ์ŠคํŠธ ํ•ธ๋“ค๋Ÿฌ์— ํŽ˜์ด์ง€๋„ค์ด์…˜ ๋กœ์ง ์ถ”๊ฐ€

- ๊ธฐ์กด์˜ ๋‹จ์ˆœ ๋ฐ˜ํ™˜ ํ•ธ๋“ค๋Ÿฌ์—์„œ ํŽ˜์ด์ง€๋„ค์ด์…˜ ๊ธฐ๋Šฅ์„ ํฌํ•จํ•œ ํ•ธ๋“ค๋Ÿฌ๋กœ ์ˆ˜์ •

* feat: `SideModal` ์ปดํฌ๋„ŒํŠธ์— `closeModal` prop ์ถ”๊ฐ€

* feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํŽ˜์ด์ง€์— ๋ฌดํ•œ ์Šคํฌ๋กค ๊ธฐ๋Šฅ ์ถ”๊ฐ€

* refactor: useReviewPreviewList ํ›… ์ƒ์„ฑํ•˜์—ฌ ๋ฐ์ดํ„ฐ ํ˜ธ์ถœ ๋กœ์ง ๋ถ„๋ฆฌ

* refactor: ๋ถˆํ•„์š”ํ•œ ButtonContainer ์ œ๊ฑฐ

* design: px์„ rem์œผ๋กœ ๋ณ€๊ฒฝ

* refactor: Button ์ปดํฌ๋„ŒํŠธ์— key ์ถ”๊ฐ€

* feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก,๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€ api ํ•ธ๋“ค๋Ÿฌ์—์„œ groupAccessCode๋ฅผ header์— ์ถ”๊ฐ€

* feat: DetailedReviewPage ์—์„œ groupAccessCode ์ƒํƒœ ์ ์šฉ

* feat: LoginRedirectModal ์ƒ์„ฑ

* refactor: ErrorSection ๋ฆฌํŒฉํ† ๋ง

* feat: ๋ฆฌ๋ทฐ์ด, ํ”„๋กœ์ ํŠธ๋ช…์„ ๋ณด์—ฌ์ฃผ๋Š” DescriptionSection ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„

* refactor: ๋ฆฌ๋ทฐ ๋ชฉ๋ก์„ ๋ถˆ๋Ÿฌ์˜ค๋Š” api ๋ณ€๊ฒฝ ์ด์Šˆ๋กœ ์ธํ•ด ์—”๋“œํฌ์ธํŠธ, fetch ํ•จ์ˆ˜ ์ˆ˜์ •

* feat: ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€์— groupAccessCode ์ƒํƒœ๋ฅผ ์ ์šฉ

- ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€์— groupAccessCode ์ƒํƒœ๊ฐ’์ด ์žˆ์œผ๋ฉด api์š”์ฒญ์„ ํ•˜๊ณ  ์—†์œผ๋ฉด LoginRedirectModal์„ ๋„์–ด์„œ ๋กœ๊ทธ์ธ ์œ ๋„ํ•˜๋Š” ๊ธฐ๋Šฅ ์ถ”๊ฐ€
- DetailedPage/index.tsx์— ์žˆ๋˜ ๋‚ด์šฉ์„ DetailedReivewPageContents๋กœ ์ด๋™
-  DetailedPage/index.tsx์—์„œ ErrorSuspenseContainer ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ˆ˜์ •

* chore: fragment ์ œ๊ฑฐ

* refactor: api ๋ณ€๊ฒฝ์— ๋”ฐ๋ผ ReviewPreviewList, ReviewPreview ์ธํ„ฐํŽ˜์ด์Šค ์ˆ˜์ •

* fix: ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€ keyword ํƒ€์ž… ๋ณ€๊ฒฝ์— ๋”ฐ๋ฅธ ์ˆ˜์ •

* refactor: ๋ณ€๊ฒฝ๋œ api์— ๋”ฐ๋ผ props ์ˆ˜์ •

* refactor: reviewerGroup, isPublic ์ œ๊ฑฐ

* feat: ErrorFallback ์˜ ํ™ˆ ์ด๋™ ๊ฒฝ๋กœ ๋ณ€๊ฒฝ

* refactor: endPoint.gettingReviewList ํ˜ธ์ถœ ์ธ์ž ๋ณ€๊ฒฝ

* refactor: DetailedReviewPage์—์„œ groupAccessCode ๊ฐ€์ ธ์˜ค๋Š” ๋ฐฉ์‹ ๋ณ€๊ฒฝ

- useRecoilValue๊ฐ€ ์•„๋‹Œ useGroupAccessCode์—์„œ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์œผ๋กœ ๋ณ€๊ฒฝ

* refactor: DescriptionSection์—์„œ ReviewInfoSection์œผ๋กœ ์ปดํฌ๋„ŒํŠธ๋ช… ๋ณ€๊ฒฝ

* refactor: ErrorPage์—์„œ Home ์ด๋™ ๋ฒ„ํŠผ์„ ์œ ๋„ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝ

- route์˜ค๋ฅ˜ ๋ฉ”์„ธ์ง€์™€ api์˜ค๋ฅ˜ ๋ฉ”์„ธ์ง€๋ฅผ errorMessage ํŒŒ์ผ์—์„œ ๊ด€๋ฆฌํ•˜๋„๋ก ์ˆ˜์ •
- ErrorPage์—์„œ errorMessage๊ฐ€ ROUTE_ERROR_MESSAGE์ด๋ฉด ํ™ˆ ๋ฒ„ํŠผ์ด ํ™”๋ฉด์ƒ์—์„œ ๋จผ์ € ๋‚˜์˜ค๋„๋ก ์ˆ˜์ •
- ์ƒ‰์ƒ๋ณ„ ํ™ˆ,refresh ์•„์ด์ฝ˜ SVG ์ถ”๊ฐ€

* refactor: useSuspenseQuery ์ ์šฉ ํ›„, ๋ฌดํ•œ์Šคํฌ๋กค ๊ด€๋ จ ์ฝ”๋“œ ์ฃผ์„ ์ฒ˜๋ฆฌ

* feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํŽ˜์ด์ง€ ๋ชฉ ์„œ๋ฒ„ ํ•ธ๋“ค๋Ÿฌ ๋ฐ ๋ชฉ๋ฐ์ดํ„ฐ ์ˆ˜์ •

* feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํŽ˜์ด์ง€์—  groupAccessCode ์ „์—ญ ์ƒํƒœ ์ ์šฉ

* refactor: ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ ์‚ญ์ œ

* chore: ์˜คํƒ€ ์ˆ˜์ •

---------

Co-authored-by: soosoo22 <[email protected]>

* [FE] feat: ๋žœ๋”ฉ ํŽ˜์ด์ง€ API ์—ฐ๋™ (#196)

* feat: ๊ทธ๋ฃน ์ƒ์„ฑ์„ ์œ„ํ•œ ์—”๋“œํฌ์ธํŠธ ์ƒ์„ฑ ๋ฐ ๋ฆฌ๋ทฐ ๋ชฉ๋ก ์—”๋“œํฌ์ธํŠธ, api ํ˜ธ์ถœ ํ•จ์ˆ˜ ์ˆ˜์ •

* fix: CSSProperties ๋Œ€์‹  ์ปค์Šคํ…€ ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜๋˜ ์ธํ„ฐํŽ˜์ด์Šค ์ˆ˜์ •

* feat: ReviewAccessForm์— ๋ชจ๋‹ฌ ๋ฐ API ์—ฐ๊ฒฐ

* fix: ๋ˆ„๋ฝ๋๋˜ CopyIcon ํŒŒ์ผ ์—…๋กœ๋“œ

* feat: ํ™•์ธ ์ฝ”๋“œ ์ž…๋ ฅ API ์—ฐ๋™

* feat: ์™„์ „ํ•œ ๋ฆฌ๋ทฐ ์ž‘์„ฑ URL์„ ๋ฆฌํ„ดํ•˜๋Š” ํ•จ์ˆ˜ ์ž‘์„ฑ

* [FE] fix: ๋ˆ„๋ฝ๋๋˜ ๋ฒ„ํŠผ ๋ฆฌํŒฉํ† ๋ง ๋ฐ ์—”๋“œํฌ์ธํŠธ ๋ณต๊ตฌ (#199)

* fix: ์ถฉ๋Œ ํ•ด๊ฒฐ ๊ณผ์ •์—์„œ ๋ˆ„๋ฝ๋๋˜ ์—”๋“œํฌ์ธํŠธ ๋ณต๊ตฌ

* fix: ๋ฒ„ํŠผ ๋ฆฌํŒฉํ† ๋ง ๋ฐ˜์˜

* feat: textarea์— ์ตœ์†Œ ์ž…๋ ฅ ๊ธ€์ž ์ˆ˜๋ฅผ ๋งŒ์กฑํ•˜์ง€ ๋ชปํ•œ ๊ฒฝ์šฐ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ ํ‘œ์‹œ ๊ธฐ๋Šฅ ๊ตฌํ˜„ (#200)

* feat: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ์™„๋ฃŒ ํŽ˜์ด์ง€์—์„œ ํ™ˆ ๋ฒ„ํŠผ ์ถ”๊ฐ€ (#201)

* docs: ๋ฆฌ๋ทฐ๋ฏธ ์†Œ๊ฐœ๊ธ€ ์ž‘์„ฑ (#203)

* [BE] refactor: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฉ”์„œ๋“œ ์ œ๊ฑฐ, ์ปจ๋ฒค์…˜ ๋ฐ ์ž‘์€ ๋ฆฌํŒฉํ† ๋ง (#206)

* refactor: date๋ฅผ review๊ฐ€ ์ œ๊ณตํ•˜๋„๋ก ์ˆ˜์ •

* style: ์ปจ๋ฒค์…˜ ์ ์šฉ

* refactor: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฉ”์„œ๋“œ ์ œ๊ฑฐ

* refactor: ๋ฉ”์„œ๋“œ๋ช… ํ†ต์ผ

* style: ๋ถˆํ•„์š”ํ•œ ๊ฐœํ–‰ ์ œ๊ฑฐ

* [FE] jest ์‚ฌ์šฉ ์‹œ nodeํ™˜๊ฒฝ ์† msw ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ์™€ ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์˜ค๋ฅ˜  ํ•ด๊ฒฐ (#215)

* ci: dependencies์—์„œ jest ์‚ญ์ œ ๋ฐ ts-jest ์„ค์น˜

* ci: jest์—์„œ ์ ˆ๋Œ€ ๊ฒฝ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก  jest.config.js ์ถ”๊ฐ€

* chore: eslint์ ์šฉ ์ œ์™ธ ํŒŒ์ผ์— jest.config.js, tsconfig.json ์ถ”๊ฐ€

* ci: jest์˜ testEnvioronment๋ฅผ jsdom์œผ๋กœ ์„ค์ •

* fix: jest์—์„œ msw ver2๋ฅผ ๋ชฉ์„œ๋ฒ„๋กœ ์‚ฌ์šฉ ์‹œ ์ƒ๊ธฐ๋Š” ์˜ค๋ฅ˜ ์ˆ˜์ •

1. msw/node ๋ฅผ ์ฝ์ง€ ๋ชปํ•จ
- jest.config.js์˜ testEnvironment ๋นˆ๋ฌธ์ž์—ด

2. ReferentError: TextEnCoder is not defined
- ํ•ด๊ฒฐ : jest.polyfills.js ์ถ”๊ฐ€ ๋ฐ undici ์„ค์น˜

3. ReferenceError: ReadableStream is not defined
- ํ•ด๊ฒฐ : undici ๋‹ค์šด ๊ทธ๋ ˆ์ด๋“œ
undici": "^6.19.5", -> "^5.0.0"

* ci : jest์—์„œ env ํŒŒ์ผ ์ฝ์„ ์ˆ˜ ์žˆ๋„๋ก dotenv ์„ค์น˜ ๋ฐ jest์— ์ ์šฉ

* [FE] ๊ฐœ๋ฐœํ™˜๊ฒฝ๊ณผ ๋นŒ๋“œํ™˜๊ฒฝ์— ๋”ฐ๋ผ msw ์‹คํ–‰ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•˜๋„๋ก msw ์‹คํ–‰ ์กฐ๊ฑด๋ฌธ ๊ฐœ์„   (#221)

* ci: ๋นŒ๋“œ ํŒŒ์ผ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” http-server ํŒจํ‚ค์ง€ ์„ค์น˜ ๋ฐ ์‹คํ–‰ ๋ช…๋ น์–ด ์ถ”๊ฐ€

* fix:๊ฐœ๋ฐœ ํ™˜๊ฒฝ๊ณผ ๋นŒ๋“œ/๋ฐฐํฌ ํ™˜๊ฒฝ์„ ๊ตฌ๋ถ„ํ•ด ๋ชฉ ์„œ๋ฒ„๋ฅผ ์‹คํ–‰ํ•˜๋„๋ก ์กฐ๊ฑด๋ฌธ ๊ฐœ์„ 

* fix: ๋จธ์ง€ ์ถฉ๋Œ ์‹œ yarn.lock ์‚ญ์ œํ•œ ๊ฑฐ ๋ณต๊ตฌ

* [FE] ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€ query ํ›… ๋ถ„๋ฆฌ ๋ฐ HTTP ์š”์ฒญ ํ…Œ์ŠคํŠธ ์ง„ํ–‰  (#216)

* refactor: DetailedPage/index.tsx ๋ฆฌํŒฉํ† ๋ง

- early return๋ฅผ ์‚ฌ์šฉํ•ด ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์„ ๋†’์ž„

* feat: useGetDetailedReview ํ›… ์ƒ์„ฑ ๋ฐ DetailedReviewPageContents์— ์ ์šฉ

* feat: useSearchParamAndQuery ํ›… ์ƒ์„ฑ ๋ฐ DetailedPageContent์— ์ ์šฉ

* refactor: ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€์—์„œ id๋ผ๊ณ  ์‚ฌ์šฉํ–ˆ๋˜ key๊ฐ’, params์˜ key๋ฅผ reviewId๋กœ ๋ณ€๊ฒฝ

- DetailedReview์˜ router param์„ id์—์„œ reviewId๋กœ ๋ณ€๊ฒฝ

* ci: dependencies์—์„œ jest ์‚ญ์ œ ๋ฐ ts-jest ์„ค์น˜

* ci: jest์—์„œ ์ ˆ๋Œ€ ๊ฒฝ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก  jest.config.js ์ถ”๊ฐ€

* chore: eslint์ ์šฉ ์ œ์™ธ ํŒŒ์ผ์— jest.config.js, tsconfig.json ์ถ”๊ฐ€

* ci: jest์˜ testEnvioronment๋ฅผ jsdom์œผ๋กœ ์„ค์ •

* refactor: useGetDetailedReview์—์„œ query ๊ฒฐ๊ณผ๋ฅผ ๋ชจ๋‘ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝ

* fix: jest์—์„œ msw ver2๋ฅผ ๋ชฉ์„œ๋ฒ„๋กœ ์‚ฌ์šฉ ์‹œ ์ƒ๊ธฐ๋Š” ์˜ค๋ฅ˜ ์ˆ˜์ •

1. msw/node ๋ฅผ ์ฝ์ง€ ๋ชปํ•จ
- jest.config.js์˜ testEnvironment ๋นˆ๋ฌธ์ž์—ด

2. ReferentError: TextEnCoder is not defined
- ํ•ด๊ฒฐ : jest.polyfills.js ์ถ”๊ฐ€ ๋ฐ undici ์„ค์น˜

3. ReferenceError: ReadableStream is not defined
- ํ•ด๊ฒฐ : undici ๋‹ค์šด ๊ทธ๋ ˆ์ด๋“œ
undici": "^6.19.5", -> "^5.0.0"

* ci : jest์—์„œ env ํŒŒ์ผ ์ฝ์„ ์ˆ˜ ์žˆ๋„๋ก dotenv ์„ค์น˜ ๋ฐ jest์— ์ ์šฉ

* fix: mock ํ•ธ๋“ค๋Ÿฌ์ธ getDetailedReview ์—์„œ ์ค‘๋ณต๋œ ์ฟผ๋ฆฌ ๋งค๊ฐœ ๋ณ€์ˆ˜ ์‚ฌ์šฉ ์ˆ˜์ •

- ์˜ค๋ฅ˜ ์ƒํ™ฉ:  jest์—์„œ msw ์‚ฌ์šฉ ์‹œ, get์˜ url์— ํŒŒ๋ผ๋ฏธํ„ฐ ์‚ฌ์šฉ ์‹œ ์ค‘๋ณต๋œ ์ฟผ๋ฆฌ ๋งค๊ฐœ ๋ณ€์ˆ˜ ์˜ค๋ฅ˜๊ฐ€ ๋‚จ
- ์˜ค๋ฅ˜ ๋ฉ”์„ธ์ง€ ::Found a redundant usage of query parameters in the request handler
- ํ•ด๊ฒฐ:  ๋ฆฌ๋ทฐ ์ƒ์„ธ๋ณด๊ธฐ ํŽ˜์ด์ง€์˜ reviews๊นŒ์ง€์˜ url ์ƒ์ˆ˜๋ฅผ ๋งŒ๋“ค๊ณ , get์—์„œ๋Š” ์ด ์ƒ์ˆ˜๋ฅผ  ํ™œ์šฉํ•œ ์ •๊ทœํ‘œํ˜„์‹์œผ๋กœ ๋ฆฌ๋ทฐ ์ƒ์„ธ๋ณด๊ธฐ ํŽ˜์ด์ง€๋กœ ์˜ค๋Š” ๋ชจ๋“  ์š”์ฒญ์„ ๊ฐ€๋กœ์ฑŒ ์ˆ˜ ์žˆ๋„๋ก  ํ•จ

* refactor: getWrongDetailedReview ๋ชฉ์„œ๋ฒ„ ํ•ธ๋“ค๋Ÿฌ ๋ฐ ๊ด€๋ จ ์ƒ์ˆ˜ ์‚ญ์ œ

- getDetailedReview์—์„œ request๋ฅผ ๋ถ„์„ํ•ด http์˜ค๋ฅ˜ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•จ

* feat: queryClientWrapper ์ƒ์„ฑ

- queryClientWrapper : msw๋ฅผ ์‚ฌ์šฉํ•œ jest ํ…Œ์ŠคํŠธ์— queryWrapper๋กœ ์‚ฌ์šฉ

* test:๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€ api ์š”์ฒญ ์„ฑ๊ณต์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

* fix: groupAccessCodeAtom์˜ ๊ธฐ๋ณธ๊ฐ’ ์›๋ž˜๋Œ€๋กœ ๋ณต๊ตฌ

* chore:queryClientWrapper ๋„ค์ด๋ฐ ํ‘œ๊ธฐ๋ฒ•์„  ํŒŒ์Šค์นผ ์ผ€์ด์Šค๋กœ ๋ณ€๊ฒฝ

* fix: ๋จธ์ง€ ์ถฉ๋Œ ๋ฐฉ์ง€๋ฅผ ์œ„ํ•ด yarn.lock ์‚ญ์ œ

* fix:  ๋จธ์ง€ ์‹œ yarn.lock ์ถฉ๋Œ ํ•ด๊ฒฐ

* [FE] test: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํŽ˜์ด์ง€์— API ์—ฐ๋™ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€ ๋ฐ ๋ฆฌํŒฉํ† ๋ง (#217)

* chore: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํŽ˜์ด์ง€ ๊ด€๋ จ ์ปดํฌ๋„ŒํŠธ ๋ฐ ์ธํ„ฐํŽ˜์ด์Šค, ํŒŒ์ผ ์ด๋ฆ„ ๋ณ€๊ฒฝ

* refactor: api ์—”๋“œํฌ์ธํŠธ ์ƒ์ˆ˜ ์ ์šฉ

* refactor: useGetReviewList ํ›…์œผ๋กœ ๋ถ„๋ฆฌ

* test: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํŽ˜์ด์ง€ api ์—ฐ๋™ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

* chore: msw ๋ชจํ‚น ์ฝ”๋“œ ์ œ๊ฑฐ

* chore: ๊ฒฝ๋กœ index ์ œ๊ฑฐ

* fix: ์ค‘๋ณต๋œ import ๋ฐ ๋ถˆํ•„์š”ํ•œ ํ•ธ๋“ค๋Ÿฌ ์ œ๊ฑฐ

* chore: ์—”๋“œํฌ์ธํŠธ ์ƒ์ˆ˜ ์ œ๊ฑฐ

* [FE] refactor: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํŽ˜์ด์ง€ ๋ฆฌํŒฉํ† ๋ง (#219)

* refactor: ๊ฐ ๋ชจ๋‹ฌ๋ณ„๋กœ ์ƒํƒœ์™€ ๋™์ž‘์„ ๊ด€๋ฆฌํ•˜๋Š” ํ›… ๋ถ„๋ฆฌ

* refactor: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํผ์˜ ๋กœ์ง์„ ํ›…์œผ๋กœ ๋ถ„๋ฆฌ

* refactor: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํŽ˜์ด์ง€์— ๋ถ„๋ฆฌํ•œ ํ›… ์ ์šฉ

* refactor: URL์—์„œ reviewRequestCode๋ฅผ ์ถ”์ถœํ•˜๋Š” ๋กœ์ง์„ ํ›…์œผ๋กœ ๋ถ„๋ฆฌ

* chore: ๋ถˆํ•„์š”ํ•œ ํ…Œ์ŠคํŠธ์šฉ ์ฝ”๋“œ ์ œ๊ฑฐ

* chore: ErrorModal์„ ๋‹ซ์„ ๋•Œ errorMessage ์ƒํƒœ๋„ ์ดˆ๊ธฐ๊ฐ’์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋„๋ก ์ˆ˜์ •

* [BE] feat: ํ—ค๋” ์กด์žฌ ์—ฌ๋ถ€ ๊ฒ€์ฆ (#207)

* fix: ์ธํ„ฐํŽ˜์ด์Šค์™€ ๊ตฌํ˜„์ฒด ์–ด๋…ธํ…Œ์ด์…˜ ์ผ์น˜

* feat: ํ—ค๋” ๊ฒ€์‚ฌ ์–ด๋…ธํ…Œ์ด์…˜

* feat: ํ—ค๋” ๋ฐธ๋ฆฌ๋ฐ์ดํ„ฐ

* feat: ์ปจํŠธ๋กค๋Ÿฌ์— ํ—ค๋” ๊ฒ€์‚ฌ

* feat: ํ—ค๋” ๊ฒ€์ฆ ๋ฉ”์‹œ์ง€ ํด๋ผ์ด์–ธํŠธ์— ์ „๋‹ฌ

* fix: ๋ˆ„๋ฝ๋œ `@Valid` ์–ด๋…ธํ…Œ์ด์…˜ ์ถ”๊ฐ€

* refactor: ์š”์ฒญ์ด null์ธ ๊ฒฝ์šฐ ํ•ธ๋“ค๋ง

* chore: ํ…Œ์ŠคํŠธ ์ด๋ฆ„ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ๋ณ€๊ฒฝ

* chore: ์†Œ๋ฌธ์ž ์ปจ๋ฒค์…˜

* feat: ArgumentResolver๋ฅผ ํ™œ์šฉํ•œ ํ—ค๋” ๊ฒ€์ฆ

* feat: ๊ณต์šฉ ํŒจํ‚ค์ง€๋กœ ์ด๋™ ๋ฐ ๋ฒ”์šฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ˆ˜์ •

* chore: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” import ์ œ๊ฑฐ

* feat: ArgumentResolver ์ ์šฉ, Validator ์‚ญ์ œ

* chore: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ปค์Šคํ…€ ์˜ˆ์™ธ ์›๋ณต

* refactor: ํ—ค๋” ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ๋ฉ”์‹œ์ง€ ์ˆ˜์ •

* chore: ๋ถˆํ•„์š”ํ•œ `@Valid` ์–ด๋…ธํ…Œ์ด์…˜ ์‚ญ์ œ

* refactor: ๋ณ€์ˆ˜ ์ถ”์ถœ

Co-authored-by: Yeongseo Na <[email protected]>

* fix: ์ปดํŒŒ์ผ ์—๋Ÿฌ ํ•ด๊ฒฐ

---------

Co-authored-by: Yeongseo Na <[email protected]>

* ci: index.html์— ๊ตฌ๊ธ€ ์• ๋„๋ฆฌํ‹ฑ์Šค ์ ์šฉ (#226)

* [FE] ci: sentry ์ดˆ๊ธฐ ์„ค์ • (#223)

* ci: sentry ์ดˆ๊ธฐ ์„ค์ •

* chore: gitignore์— env.sentry-build-plugin ์ถ”๊ฐ€

* ci: sentry ์ ์šฉ ํ”„๋กœ์ ํŠธ๋ฅผ woowacoure-review-me๋กœ ๋ณ€๊ฒฝ, ๋กœ์ปฌ ํ™˜๊ฒฝ ์ถ”์ ํ•˜๋„๋ก ๋ณ€๊ฒฝ

* ci: sentry ์ ์šฉ ํ™˜๊ฒฝ์„ ๋ฐฐํฌ ํ™˜๊ฒฝ์œผ๋กœ ๋‹ค์‹œ ๋ณ€๊ฒฝ

* ci: sentry์—์„œ replay ๊ด€๋ จ ์„ค์ • ์‚ญ์ œ

---------

Co-authored-by: badahertz52 <[email protected]>

* [FE] refactor: LandingPage์— ๋ฆฌ์•กํŠธ ์ฟผ๋ฆฌ ์ ์šฉ ๋ฐ ๋ฆฌํŒฉํ† ๋ง (#218)

* chore: LandingPage์˜ styles ํŒŒ์ผ ๋ถ„๋ฆฌ

* fix: POST ์š”์ฒญ์„ ํ•˜๋Š” ํ•จ์ˆ˜์˜ ์ด๋ฆ„์„ post~๋กœ ์ˆ˜์ •

* feat: ๊ทธ๋ฃน ๋ฐ์ดํ„ฐ ์ƒ์„ฑ ์š”์ฒญ์— ๋Œ€ํ•œ MSW ํ•ธ๋“ค๋Ÿฌ ์ถ”๊ฐ€

* refactor: ๋ชจํ‚น ๋ฐ์ดํ„ฐ ๊ฐ’์„ ๋” ์ง๊ด€์ ์œผ๋กœ ์ˆ˜์ •

* refactor: LandingPage๋ฅผ ErrorSuspenseContainer๊ฐ€ ๊ฐ์‹ธ๋„๋ก ์ˆ˜์ •

* refactor: URL์„ ์–ป์–ด์˜ค๋Š” API์— react-query ์ ์šฉ ๋ฐ API ํ˜ธ์ถœ ํ•จ์ˆ˜ ์ด๋ฆ„ ์ˆ˜์ •

* chore: LandingPage ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ๋“ค์˜ index ํŒŒ์ผ ์ถ”๊ฐ€ ๋ฐ ์ ์šฉ

* refactor: groupAccessCode ๊ด€๋ จ msw ํ•ธ๋“ค๋Ÿฌ ์ถ”๊ฐ€ ๋ฐ ์—๋Ÿฌ ์ƒํƒœ(์—†๋Š” ์ฝ”๋“œ ์ž…๋ ฅ, ์„œ๋ฒ„ ์—๋Ÿฌ)์— ๋”ฐ๋ฅธ ์—๋Ÿฌ ๋ฉ”์„ธ์ง€๋ฅผ ์ถœ๋ ฅํ•˜๋„๋ก ์ˆ˜์ •

* refactor: groupAccessCode์— ์•ŒํŒŒ๋ฒณ ๋Œ€์†Œ๋ฌธ์ž์™€ ์ˆซ์ž๋งŒ ์˜ฌ ์ˆ˜ ์žˆ๋„๋ก ์ˆ˜์ •

* refactor: LandingPage์—์„œ ErrorSuspenseContainer๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ๋Œ€์‹  URLGeneratorForm๋งŒ์„ ๊ฐ์‹ธ๋„๋ก ์ˆ˜์ •

* refactor: Input ์ปดํฌ๋„ŒํŠธ์˜ onChange ์ด๋ฒคํŠธ ํƒ€์ž… ์ˆ˜์ •

* refactor: Input ์ปดํฌ๋„ŒํŠธ์— name ์†์„ฑ ์ถ”๊ฐ€

* refactor: ์ˆ˜์ •๋œ ๊ฒฝ๋กœ ๋ฐ˜์˜

* refactor: usePostDataForUrl ์ฟผ๋ฆฌ์—์„œ mutation์„ ๋ฆฌํ„ดํ•˜๋„๋ก ์ˆ˜์ •

* refactor: URL์„ ์„ฑ๊ณต์ ์œผ๋กœ ์ƒ์„ฑํ•œ ์ดํ›„ Input์„ ๋ฆฌ์…‹ํ•˜๋Š” ํ•จ์ˆ˜ ์ถ”๊ฐ€

* chore: NOTE ์ฃผ์„ ์ถ”๊ฐ€

* refactor: getIsValidGroupAccessCodeApi์—์„œ 400 ์™ธ์˜ ์—๋Ÿฌ ์ฒ˜๋ฆฌ๋ฅผ ๊ธฐ์กด์˜ createApiErrorMessage๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์ˆ˜์ •

* chore: ๋ˆ„๋ฝ๋๋˜ -Api suffix ๋ฐ˜์˜

* [BE] Actuator ์ ์šฉ๊ณผ logback ์„ค์ • (#228)

* build: actuator ์˜์กด์„ฑ ์ถ”๊ฐ€

* feat: ๋กœ๊ทธ๋ฐฑ ์„ค์ •

* feat: submodule ์ ์šฉ

- actuator ์„ค์ •์„ ์„œ๋ธŒ ๋ชจ๋“ˆ์— ์ €์žฅ

* style: ๊ฐœํ–‰ ๋ฐ ์ฃผ์„ ์ œ๊ฑฐ

* test: logback ์„ค์ • ์ถ”๊ฐ€

* [FE] CD test (#233)

* ci: sentry ์ดˆ๊ธฐ ์„ค์ •

* chore: ์„œ๋น„์Šค ํƒ€์ดํ‹€ ๋Œ€๋ฌธ์ž๋กœ ๋ณ€๊ฒฝ

* chore: merge

* [BE] ํ”„๋กœํŒŒ์ผ ๋ถ„๋ฆฌ, CD ์Šคํฌ๋ฆฝํŠธ ์ˆ˜์ • (#235)

* feat: ํ”„๋กœํŒŒ์ผ ๋ถ„๋ฆฌ

* feat: ํ”„๋กœํŒŒ์ผ ๋ถ„๋ฆฌ

* cd: ํ”„๋กœํŒŒ์ผ ๋ถ„๋ฆฌ cd ์Šคํฌ๋ฆฝํŠธ ์ˆ˜์ •

* fix: CD ์Šคํฌ๋ฆฝํŠธ ์˜คํƒ€ ์ˆ˜์ • (#236)

* [FE] CD test 2 (#237)

* ci: sentry ์ดˆ๊ธฐ ์„ค์ •

* chore: ์„œ๋น„์Šค ํƒ€์ดํ‹€ ๋Œ€๋ฌธ์ž๋กœ ๋ณ€๊ฒฝ

* chore: merge

* fix: sentry ์žฌ์„ค์ •

* fix: sentry ์„ค์ • ๋ณต๊ตฌ

* fix: cd ์Šคํฌ๋ฆฝํŠธ ์˜คํƒ€ ์ˆ˜์ • (#238)

* [FE] CD TEST 3 (#239)

* ci: sentry ์ดˆ๊ธฐ ์„ค์ •

* chore: ์„œ๋น„์Šค ํƒ€์ดํ‹€ ๋Œ€๋ฌธ์ž๋กœ ๋ณ€๊ฒฝ

* chore: merge

* fix: sentry ์žฌ์„ค์ •

* fix: sentry ์„ค์ • ๋ณต๊ตฌ

* chore: ์„œ๋น„์Šค ํƒ€์ดํ‹€ ๋ณ€๊ฒฝ

* [BE] build: Micrometer ์˜์กด์„ฑ ์ถ”๊ฐ€ (#244)

* build: ๋งˆ์ดํฌ๋กœ๋ฏธํ„ฐ ์˜์กด์„ฑ ์ถ”๊ฐ€

Co-authored-by: hyeonjilee <[email protected]>
Co-authored-by: nayonsoso <[email protected]>

* chore: ์„œ๋ธŒ๋ชจ๋“ˆ ์—…๋ฐ์ดํŠธ

Co-authored-by: hyeonjilee <[email protected]>
Co-authored-by: nayonsoso <[email protected]>

---------

Co-authored-by: hyeonjilee <[email protected]>
Co-authored-by: nayonsoso <[email protected]>

* [FE] feat: ๊ณตํ†ต ์ปดํฌ๋„ŒํŠธ์ธ ์ฒดํฌ๋ฐ•์Šค์™€ ์ฒดํฌ๋ฐ•์Šค ์•„์ดํ…œ ์ œ์ž‘ (#240)

* feat: ๊ณตํ†ต ์ฒดํฌ๋ฐ•์Šค ์ปดํฌ๋„ŒํŠธ ์ž‘์„ฑ

* feat: ์ฒดํฌ๋ฐ•์Šค์— ๋ ˆ์ด๋ธ”์„ ๋‹ฌ ์ˆ˜ ์žˆ๋Š” CheckboxItem ์ปดํฌ๋„ŒํŠธ ์ž‘์„ฑ

* fix: style์„ ์ž˜๋ชป ์ „๋‹ฌํ•˜๋˜ ๋ฌธ์ œ ํ•ด๊ฒฐ

* [BE] fix: CD ์Šคํฌ๋ฆฝํŠธ ์ˆ˜์ • (#246)

* fix: CD ์Šคํฌ๋ฆฝํŠธ ์ˆ˜์ •

* chore: ์ €์žฅ ๋ฐ์ดํ„ฐ dev์—์„œ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ˆ˜์ •

* [FE] refactor: LandingPage ๊ฒฝ๋กœ ๋ณ€๊ฒฝ (#249)

* refactor: LandingPage์˜ ๊ฒฝ๋กœ ๋ณ€๊ฒฝ

* refactor: App ์—์„œ ์‚ฌ์ด๋“œ๋ฐ” ์ฃผ์„ ์ฒ˜๋ฆฌ

* [BE] Swagger API ๋ฌธ์„œ ์—…๋ฐ์ดํŠธ (#254)

* docs: ๋ฆฌ๋ทฐ api ๋ฌธ์„œ๋ฅผ ์œ„ํ•œ swagger ์–ด๋…ธํ…Œ์ด์…˜ ์ถ”๊ฐ€

* refactor: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” dto ์‚ญ์ œ

* docs: api ๋ฌธ์„œ์— ์ตœ์†Œ ๋ฐ ์ตœ๋Œ€ ์„ค์ • ์•ˆ๋‚ด ์ถ”๊ฐ€

* docs: ๋ฆฌ๋ทฐ ๊ทธ๋ฃน api๋ฅผ ์œ„ํ•œ swagger ์–ด๋…ธํ…Œ์ด์…˜ ์ถ”๊ฐ€

* refactor: Spring์—์„œ ์ œ๊ณตํ•˜๋Š” APPLICATION_JSON_VALUE ์‚ฌ์šฉ

* [BE] feat: ์˜ˆ์™ธ์— ๋Œ€ํ•œ ๋กœ๊ทธ ์ž‘์„ฑ (#255)

* feat: Controller advice ์— ๋กœ๊น… ์ถ”๊ฐ€

* refactor: ์Šคํƒ ํŠธ๋ ˆ์ด์Šค ๋กœ๊น… ์ถ”๊ฐ€

* feat: ๋ฆฌ๋ทฐ๊ทธ๋ฃน ์ƒ์„ฑ์‹œ ๊ธธ์ด ๊ฒ€์ฆ ๋กœ๊น… ์ถ”๊ฐ€

* feat: ๋‹ต๋ณ€ ๊ธธ์ด ๊ฒ€์ฆ ๋กœ๊น… ์ถ”๊ฐ€

* feat: ๋ฆฌ๋ทฐ ๊ทธ๋ฃน ์ฝ”๋“œ ๊ฒ€์ฆ ๊ฒ€์ฆ ๋กœ๊น… ์ถ”๊ฐ€

* feat: ๋ฆฌ๋ทฐ ์กฐํšŒ ๊ฒ€์ฆ ๊ฒ€์ฆ ๋กœ๊น… ์ถ”๊ฐ€

* feat: ์„ ํƒ๋œ ํ‚ค์›Œ๋“œ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒ€์ฆ ๋กœ๊น… ์ถ”๊ฐ€

* feat: ์ค‘๋ณต ์„ ํƒ๋œ ํ‚ค์›Œ๋“œ ๊ฒ€์ฆ ๋กœ๊น… ์ถ”๊ฐ€

* feat: ํ‚ค์›Œ๋“œ ์กฐํšŒ ๊ฒ€์ฆ ๋กœ๊น… ์ถ”๊ฐ€

* feat: ์„ ํƒ ํ‚ค์›Œ๋“œ ๊ฐฏ์ˆ˜ ๊ฒ€์ฆ ๋กœ๊น… ์ถ”๊ฐ€

* feat: ์„ ํƒ๋œ ์งˆ๋ฌธ ์ค‘๋ณต ๊ฒ€์ฆ ๋กœ๊น… ์ถ”๊ฐ€

* feat: ์งˆ๋ฌธ ์กฐํšŒ ๊ฒ€์ฆ ๋กœ๊น… ์ถ”๊ฐ€

* feat: ์ค‘๋ณต ์งˆ๋ฌธ ๊ฒ€์ฆ ๋กœ๊น… ์ถ”๊ฐ€

* feat: ์Šคํ”„๋ง ๋ฐœ์ƒ ์˜ˆ์™ธ ๋กœ๊น…์— ๋ฉ”์„ธ์ง€ ์ถ”๊ฐ€

* feat: ์ธ์ฝ”๋”ฉ ์„ค์ •

* style: ๊ฐœํ–‰ ์ˆ˜์ •

Co-authored-by: Donghoon Lee <[email protected]>

* style: ๊ฐœํ–‰ ๋ฐ ๊ณต๋ฐฑ ์ˆ˜์ •

* refactor: ๋ถˆํ•„์š”ํ•œ ๊ฒ€์ฆ ์ œ๊ฑฐ

- ์„ ํƒ๋œ ํ‚ค์›Œ๋“œ์™€ ์งˆ๋ฌธ์ด DB์— ์žˆ๋Š”์ง€๋ฅผ validator ์—์„œ ๊ฒ€์ฆํ•œ ํ›„์—๋„, repository.getById ๋ฅผ ํ•  ๋•Œ ํ•œ๋ฒˆ ๋” ๊ฒ€์ฆ์ด ๋“ค์–ด๊ฐ„๋‹ค. ๋”ฐ๋ผ์„œ 'DB์— ์žˆ๋Š”์ง€'์— ๋Œ€ํ•œ ๊ฒ€์ฆ์„ validator ์—์„œ ํ•  ํ•„์š”๋Š” ์—†๋‹ค๋Š” ํŒ๋‹จ ํ•˜์— ํ•ด๋‹น ๋กœ์ง์„ ์‚ญ์ œํ•œ๋‹ค.

---------

Co-authored-by: Donghoon Lee <[email protected]>

* [FE] refactor:  Textarea๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ณตํ†ต ์žฅ๋ฌธํ˜• ๋‹ต๋ณ€ ์ž…๋ ฅ ์ปดํฌ๋„ŒํŠธ ๋ถ„๋ฆฌ (#252)

* feat: ๊ณตํ†ต textarea ์ปดํฌ๋„ŒํŠธ ์ž‘์„ฑ

* refactor: longReviewItem์˜ ๋กœ์ง์„ ์ปค์Šคํ…€ ํ›…์œผ๋กœ ๋ถ„๋ฆฌ

* refactor: longReviewItem์œผ๋กœ ์ด๋ฆ„ ๋ณ€๊ฒฝ ๋ฐ ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„

* chore: ๊ธฐ์กด์˜ ReviewItem ์ œ๊ฑฐ ๋ฐ ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํŽ˜์ด์ง€์— LongReviewItem ์ ์šฉ

* [FE] refactor: ๊ณต์šฉ ๋ชจ๋‹ฌ ํ›… ์ถ”๊ฐ€ ๋ฐ LongReviewItem ๋ฆฌํŒฉํ† ๋ง (#258)

* feat: ๋ชจ๋‹ฌ ์ƒํƒœ ๊ด€๋ฆฌ ํ›… ์ถ”๊ฐ€

* refactor: LongReviewItem ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์™ธ๋ถ€์˜ event๋ฅผ props๋กœ ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก ๋ณ€๊ฒฝ

* [FE] test: LandingPage์—์„œ ์‚ฌ์šฉํ•˜๋Š” API์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ (#251)

* chore: ๋ถˆํ•„์š”ํ•œ Fragment ์ œ๊ฑฐ

* test: LandingPage์—์„œ ์‚ฌ์šฉํ•˜๋Š” api ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

* [FE] refactor: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํŽ˜์ด์ง€์— react query๋ฅผ ์ ์šฉํ•˜๊ณ  API ์—ฐ๋™ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ (#256)

* refactor: ๋ฆฌ๋ทฐ ์ž‘์„ฑ์„ ์œ„ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๋กœ์ง์— react query ์ ์šฉ

* refactor: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํ›„ ๊ฒŒ์‹œ ์š”์ฒญ ๋กœ์ง์— useMutation ์ ์šฉ

* refactor: query key ์ƒ์ˆ˜ํ™” ๋ฐ ๋ฆฌ๋ทฐ ์ž‘์„ฑ์„ ์œ„ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๋กœ์ง์„ useReviewForm์—์„œ ์ œ๊ฑฐ

* chore: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํŽ˜์ด์ง€์— ErrorSuspenseContainer ์ ์šฉ

* chore: styled component๋ช… ์ˆ˜์ •

* chore: ๋ฆฌ๋ทฐ ์ž‘์„ฑ์„ ์œ„ํ•œ mock data๋ฅผ ๋ณ€๊ฒฝ๋œ api ํ˜•์‹์— ๋งž๊ฒŒ ์ˆ˜์ •

* chore: useGetDataToWrite๊ฐ€ ๋” ๋งŽ์€ ๋ฐ˜ํ™˜๊ฐ’์„ ์ œ๊ณตํ•˜๋„๋ก ์ˆ˜์ •

* test: useGetDataToWrite์˜ API ์š”์ฒญ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ

* chore: dataToWrite๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ ์ƒํƒœ ๊ธฐ๋ณธ๊ฐ’ ์ง€์ •

* chore: msw๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฆฌ๋ทฐ ์ƒ์„ฑ post ์š”์ฒญ mocking

* chore: ๋ฆฌ๋ทฐ ์ •๋ณด mocking data ์ƒ์„ฑ

* chore: useMutationReview๊ฐ€ UseMutationResult ํƒ€์ž… ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ์„ค์ •

* test: useMutateReview์˜ API ์š”์ฒญ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ

* chore: useGetDataToWrite์˜ ๋ฐ˜ํ™˜๊ฐ’์„ ๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ˆ˜์ •

* chore: LongReviewItem ์ปดํฌ๋„ŒํŠธ ์ ์šฉ

* [FE] fix: ์งˆ๋ฌธ ๋ฒˆํ˜ธ๊ฐ€ ์ž˜๋ชป ์ถœ๋ ฅ๋˜๋Š” ์˜ค๋ฅ˜ ๋ฐ ๋ฆฌ๋ทฐ ์ž‘์„ฑ ์™„๋ฃŒ ์‹œ ์ž˜๋ชป๋œ ๊ฒฝ๋กœ๋กœ ์ด๋™ํ•˜๋Š” ์˜ค๋ฅ˜ ์ˆ˜์ • (#265)

* fix: ์งˆ๋ฌธ ๋ฒˆํ˜ธ๊ฐ€ ์ž˜๋ชป ์ถœ๋ ฅ๋˜๋Š” ์˜ค๋ฅ˜ ์ˆ˜์ •

* fix: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ์™„๋ฃŒ ์‹œ ์ž˜๋ชป๋œ ๊ฒฝ๋กœ๋กœ ์ด๋™๋˜๋Š” ๋ฌธ์ œ ์ˆ˜์ •

* [BE] feat: ์งˆ๋ฌธ ๋ฆฌ๋ทฐ์ด ์ด๋ฆ„์œผ๋กœ ์น˜ํ™˜ (#262)

* chore: cd ํ…Œ์ŠคํŠธ ํ™•์ธ ์ฝ”๋“œ ์ž‘์„ฑ (#272)

* fix: ์ƒ์„ธ ๋‚ด์šฉ ํ‘œ์‹œํ•  ๋•Œ ๋ฆฌ๋ทฐ์ด ์ด๋ฆ„ ์น˜ํ™˜ (#270)

* [FE] feat: ํด๋ฆฝ๋ณด๋“œ ๋ณต์‚ฌ ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„ (#261)

* feat: ํด๋ฆฝ๋ณด๋“œ ๋ณต์‚ฌ ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„

Co-authored-by: skylar1220 <[email protected]>

* fix: ๋ถ€๋ชจ ์š”์†Œ์˜ ๋„ˆ๋น„์— ๋”ฐ๋ผ CopyTextButton์ด ์ž‘์•„์ง€๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ

* refactor: ReviewGroupDataModal ์Šคํƒ€์ผ ์กฐ์ • - ์ „์ฒด ํฌ๊ธฐ ์ง€์ • ๋ฐ gap ์กฐ์ •

* chore: ๋ถˆํ•„์š”ํ•œ padding ์ œ๊ฑฐ

* chore: index ํŒŒ์ผ์— CopyTextButton ์ถ”๊ฐ€

---------

Co-authored-by: skylar1220 <[email protected]>

* [FE] chore: front_deploy๋ฅผ develop์— ๋ฐ˜์˜ (#276)

* [FE] feat: ์งˆ๋ฌธ ์ž‘์„ฑ ํŽ˜์ด์ง€ QuestionCard, ReviewWritingCard ๊ณตํ†ต ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ค๊ณ , ์Šฌ๋ผ์ด๋” ๋ฐฉ์‹์˜ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ (#247)

* chore: .gitignore์—์„œ ์ฃผ์„ ์ œ๊ฑฐ

* feat: QuestionCard ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„

* feat: ReviewWritingCard ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„

* style: CSS ์†์„ฑ ์ˆœ์„œ ์ •๋ ฌ

* refactor: ์ œ๋ชฉ๊ณผ ๋‚ด์šฉ์„ ๊ฐ๊ฐ Header์™€ Main ์„น์…˜์œผ๋กœ ๋ถ„๋ฆฌ

* feat: ์Šฌ๋ผ์ด๋” ๋ฐฉ์‹์œผ๋กœ ์งˆ๋ฌธ ์นด๋“œ๊ฐ€ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ „ํ™˜๋˜๋Š” ๊ธฐ๋Šฅ ์ถ”๊ฐ€

* design: pretendard ํฐํŠธ ์ ์šฉ

* chore: ํ—ค๋” review me ๋Œ€๋ฌธ์ž๋กœ ๋ณ€๊ฒฝ

* refactor: QuestionCard, ReviewWritingCard ํด๋” ์œ„์น˜ ๋ณ€๊ฒฝ

- ReviewWritingFormPage์˜ components๋กœ ์ด๋™

* [FE] ์งˆ๋ฌธ ์ž‘์ • ํŽ˜์ด์ง€์— ํ•„์š”ํ•œ ์งˆ๋ฌธ ๋ชฉ ๋ฐ์ดํ„ฐ ๋ฐ ์นด๋“œ์˜ ์ƒํƒœ ์ฒ˜๋ฆฌ (#263)

* [BE] fix: CD ์Šคํฌ๋ฆฝํŠธ ์ˆ˜์ • (#246)

* fix: CD ์Šคํฌ๋ฆฝํŠธ ์ˆ˜์ •

* chore: ์ €์žฅ ๋ฐ์ดํ„ฐ dev์—์„œ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ˆ˜์ •

* [FE] refactor: LandingPage ๊ฒฝ๋กœ โ€ฆ
skylar1220 added a commit that referenced this pull request Aug 21, 2024
* [FE] ํ”„๋ก ํŠธ์—”๋“œ ์ดˆ๊ธฐ ์„ธํŒ… (#5)

* ci: webpack, react, typescript ์„ค์ •

* ci: eslint, prettier, stylelint ์„ค์ •

* [BE] feat: ์ดˆ๊ธฐ ํ™˜๊ฒฝ ์„ค์ • (#8)

* feat: ์ดˆ๊ธฐ ํ™˜๊ฒฝ ์„ค์ •

* refactor: ํด๋ž˜์Šค ์ข…๋ฃŒ ์ „ ๊ฐœํ–‰ ์ œ๊ฑฐ

* build: application.yml ์„ค์ •

* [BE] feat: ์ดˆ๊ธฐ ์—”ํ‹ฐํ‹ฐ ์ž‘์„ฑ (#10)

* feat: ์ดˆ๊ธฐ ์—”ํ‹ฐํ‹ฐ ์ž‘์„ฑ

* refactor: ๋ฆฌ๋ทฐ ๋‚ด์šฉ๊ณผ ๋ฆฌ๋ทฐ๋ฅผ ๋‹ค๋Œ€์ผ ์—ฐ๊ฒฐ

* refactor: ํŒจํ‚ค์ง€ ๊ตฌ์กฐ ๊ณ ๋ คํ•˜์—ฌ ProjectGroup์œผ๋กœ ์ˆ˜์ •

* refactor: Project -> Reviewer๋กœ ๋ณ€๊ฒฝ

* refactor: ํ…Œ์ด๋ธ”๋ช… ์ผ์น˜ (reviewer_group)

* [BE] feat: ๋ฆฌ๋ทฐ ์ž‘์„ฑ (#15)

* feat: ์ดˆ๊ธฐ ์—”ํ‹ฐํ‹ฐ ์ž‘์„ฑ

* refactor: ๋ฆฌ๋ทฐ ๋‚ด์šฉ๊ณผ ๋ฆฌ๋ทฐ๋ฅผ ๋‹ค๋Œ€์ผ ์—ฐ๊ฒฐ

* refactor: ํŒจํ‚ค์ง€ ๊ตฌ์กฐ ๊ณ ๋ คํ•˜์—ฌ ProjectGroup์œผ๋กœ ์ˆ˜์ •

* refactor: Project -> Reviewer๋กœ ๋ณ€๊ฒฝ

* refactor: ํ…Œ์ด๋ธ”๋ช… ์ผ์น˜ (reviewer_group)

* feat: ๋ฉค๋ฒ„ ๋ ˆํฌ์ง€ํ† ๋ฆฌ ์ƒ์„ฑ

* feat: ๋ฆฌ๋ทฐ์–ด๊ทธ๋ฃน ๋ ˆํฌ์ง€ํ† ๋ฆฌ ์ƒ์„ฑ

* feat: ๋ฆฌ๋ทฐ ๋ฌธํ•ญ ๋ ˆํฌ์ง€ํ† ๋ฆฌ ์ƒ์„ฑ

* feat: ํ‚ค์›Œ๋“œ ๋ ˆํฌ์ง€ํ† ๋ฆฌ ์ƒ์„ฑ

* feat: ๋ฆฌ๋ทฐ ํ‚ค์›Œ๋“œ ๋ ˆํฌ์ง€ํ† ๋ฆฌ ์ƒ์„ฑ

* feat: ๋ฆฌ๋ทฐ ๋ ˆํฌ์ง€ํ† ๋ฆฌ ์ƒ์„ฑ

* feat: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ๊ธฐ๋Šฅ ๊ตฌํ˜„

* test: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ๊ธฐ๋Šฅ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

---------

Co-authored-by: donghoony <[email protected]>
Co-authored-by: nayonsoso <[email protected]>

* [BE] feat: ํ…Œ์ŠคํŠธ ๋ฉ”์„œ๋“œ๋ณ„ ๊ฒฉ๋ฆฌ (#19)

* feat: ํ…Œ์ŠคํŠธ ๊ฒฉ๋ฆฌ๋ฅผ ์œ„ํ•œ DB Cleaner ๋ฐ Extension ๊ตฌํ˜„

* feat: Service์—์„œ ๊ณตํ†ต์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์–ด๋…ธํ…Œ์ด์…˜ ์ œ๊ณต

* test: ์„œ๋น„์Šค ํ…Œ์ŠคํŠธ ์–ด๋…ธํ…Œ์ด์…˜ ์‚ฌ์šฉํ•˜๋„๋ก ์ˆ˜์ •

* fix: ๋ˆ„๋ฝ๋œ ๋ฆฌ๋ทฐ ์ž‘์„ฑ ๋งคํ•‘ URL ์ถ”๊ฐ€ (#17)

* [BE] feat: ๋ฆฌ๋ทฐ ์กฐํšŒ (#22)

* feat: ๋ฆฌ๋ทฐ ์กฐํšŒ ๊ธฐ๋Šฅ ์ถ”๊ฐ€

* style: ๊ฐœํ–‰ ๋ณ€๊ฒฝ

* test: ๋ฆฌ๋ทฐ ์กฐํšŒ ๊ธฐ๋Šฅ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

* refactor: ๋ฆฌ๋ทฐ ์กฐํšŒ ๋ฉ”์„œ๋“œ๋ช… ๋ณ€๊ฒฝ

* refactor: id ํƒ€์ž… ๋ณ€๊ฒฝ

* style: ๊ฐœํ–‰ ์ˆ˜์ •

* fix: PostMapping ์ˆ˜์ •

---------

Co-authored-by: KIMGYUTAE <[email protected]>
Co-authored-by: donghoony <[email protected]>

* [BE] feat: ์ปค์Šคํ…€ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ (#20)

* feat: ์ปค์Šคํ…€ ์˜ˆ์™ธ ์ƒ์„ฑ

* feat: ์ปค์Šคํ…€ ์˜ˆ์™ธ ์ ์šฉ

* feat: ๊ธ€๋กœ๋ฒŒ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ

* [BE] feat: ๋ฆฌ๋ทฐ์–ด ๊ทธ๋ฃน ์ •๋ณด ๋ฐ ํ‚ค์›Œ๋“œ ์กฐํšŒ API (#24)

* feat: ํ‚ค์›Œ๋“œ ์กฐํšŒ API

* feat: ๋ฆฌ๋ทฐ ๊ทธ๋ฃน ์กฐํšŒ API

* refactor: PathVariable ๋ณ€์ˆ˜๋ช… ๋ณ€๊ฒฝ

* [FE] ๋ฆฌ๋ทฐ ์ž‘์„ฑํ™”๋ฉด๊ณผ ์ƒ์„ธ ๋ฆฌ๋ทฐ ๋ณด๊ธฐ ํ™”๋ฉด ๊ฒฐํ•ฉ (#26)

* fix : webpack dev sever ์—ด ๋•Œ ์˜ค๋ฅ˜ ์ˆ˜์ •

- package.json ์—์„œ type :"module" ์‚ญ์ œ , stylelint ๊ด€๋ จ ์„ค์ • ์‚ญ์ œ

Co-Authored-By: ImxYJL <[email protected]>

* ci : svgํŒŒ์ผ ๊ด€๋ จ ํ™˜๊ฒฝ ์…‹ํŒ…

Co-Authored-By: ImxYJL <[email protected]>

* design : reset ์Šคํƒ€์ผ, global style์—์„œ ํฐํŠธ ์ ์šฉ

Co-Authored-By: ImxYJL <[email protected]>

* feat: ๋ฆฌ๋ทฐ ์ž ๊ธˆ ๋ฒ„ํŠผ ์ถ”๊ฐ€

Co-Authored-By: ImxYJL <[email protected]>

* feat: ์ƒ์„ธ ๋ฆฌ๋ทฐ ๋ณด๊ธฐ ํ™”๋ฉด์˜ ์งˆ๋ฌธ,๋‹ต ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€

Co-Authored-By: ImxYJL <[email protected]>

* feat: ์ƒ์„ธ ๋ฆฌ๋ทฐ ๋ณด๊ธฐ ํ™”๋ฉด์˜ ํ”„๋กœ์ ํŠธ ์„ค๋ช… ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€

Co-Authored-By: ImxYJL <[email protected]>

* feat : ์ƒ์„ธ ๋ฆฌ๋ทฐ ๋ณด๊ธฐ ํ™”๋ฉด ํŽ˜์ด์ง€ ์ถ”๊ฐ€ ๋ฐ ์ƒ์„ธ ๋ฆฌ๋ทฐ ๋ฐ์ดํ„ฐ ํƒ€์ž… ์ถ”๊ฐ€

Co-Authored-By: ImxYJL <[email protected]>

* fix: webpack dev server ์—ด ๋•Œ ์˜ค๋ฅ˜ ์ˆ˜์ •

Co-authored-by: soosoo22 <[email protected]>

* design: reset css ์ ์šฉ

Co-authored-by: soosoo22 <[email protected]>

* feat: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํŽ˜์ด์ง€ ๊ตฌํ˜„

Co-authored-by: soosoo22 <[email protected]>

* ci: svg ํŒŒ์ผ ๊ด€๋ จ ์„ค์ •

* fix : ๋จธ์ง€์ถฉ๋Œ ํ•ด๊ฒฐ ๋ฐ ์˜คํƒ€ ์ˆ˜์ •

* feat: react-router-dom, react-router ์„ค์น˜ ๋ฐ ์„ค์ •

* refactor: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํŽ˜์ด์ง€์™€ ์ƒ์„ธ ๋ฆฌ๋ทฐ ๋ณด๊ธฐ ํŽ˜์ด์ง€ ๊ฒฐํ•ฉ ๋ฐ ๋ฆฌํŒฉํ† ๋ง

* refactor: ๋ฆฌ๋ทฐ ํƒ€์ž… ํŒŒ์ผ ๋ฆฌํŒฉํ† ๋ง ๋ฐ ํƒ€์ž… ์ถ”๊ฐ€

* feat: api ์„ค์ • ์ถ”๊ฐ€ ๋ฐ ์ƒ์„ธ ๋ฆฌ๋ทฐ ๋ณด๊ธฐ ํŽ˜์ด์ง€์— api ํ•ธ๋“ค๋Ÿฌ ์ถ”๊ฐ€

---------

Co-authored-by: ImxYJL <[email protected]>
Co-authored-by: chysis <[email protected]>
Co-authored-by: soosoo22 <[email protected]>

* [BE] refactor: ํŒจํ‚ค์ง€ ๊ตฌ์กฐ ๋ฆฌํŒฉํ„ฐ๋ง (#30)

* refactor: ํŒจํ‚ค์ง€ ๊ตฌ์กฐ ๊ตฌ์ฒดํ™”

* refactor: ํŒจํ‚ค์ง€ ๊ตฌ์กฐ ๊ตฌ์ฒดํ™”(์„œ๋น„์Šค, ์ปจํŠธ๋กค๋Ÿฌ, ๋ ˆํฌ์ง€ํ† ๋ฆฌ)

* [BE] feat: ๋ฆฌ๋ทฐ์–ด ๊ทธ๋ฃน ์„ค๋ช… ์ž‘์„ฑ, ๋งˆ๊ฐ ๊ธฐํ•œ ๋ฐ ๊ฒ€์ฆ ๋กœ์ง ์ถ”๊ฐ€ (#34)

* feat: BadRequestException ์ถ”๊ฐ€

* feat: ๋ฆฌ๋ทฐ์–ด ๊ทธ๋ฃน ์ด๋ฆ„, ์„ค๋ช… ๊ธธ์ด ๊ฒ€์ฆ

* [FE] design: theme ,์ „์—ญ ์Šคํƒ€์ผ์„ ์„ค์ • (#41)

* chore: ๋ถˆํ•„์š”ํ•œ ํŒŒ์ผ ์‚ญ์ œ

Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: soosoo22 <[email protected]>
Co-Authored-By: Fe <[email protected]>

* design: theme ์ƒ์„ฑ

- ์ƒ‰์ƒ, ํฐํŠธ ์‚ฌ์ด์ฆˆ, ํฐํŠธ wieght ์„ค์ •

Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: soosoo22 <[email protected]>
Co-Authored-By: Fe <[email protected]>

* design: emotion ThemeProvider ์ ์šฉ ๋ฐ Theme ํƒ€์ž… ํ™•์žฅ

- emotion์—์„œ ์ œ๊ณตํ•˜๋Š” Theme ํƒ€์ž…์ด ๋นˆ ๊ฐ์ฒด์—ฌ์„œ ์ฝ”๋“œ์—์„œ ์‚ฌ์šฉํ•˜๋Š” theme์— ๋งž๊ฒŒ ํƒ€์ž…์„ ํ™•์žฅํ•จ

Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: soosoo22 <[email protected]>
Co-Authored-By: Fe <[email protected]>

* design : rem ์…‹ํŒ… ๋ฐ reset.css๋ฅผ globalStyle์— ์ ์šฉ

Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: soosoo22 <[email protected]>
Co-Authored-By: Fe <[email protected]>

* chore: App์—์„œ ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ ์‚ญ์ œ

Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: soosoo22 <[email protected]>
Co-Authored-By: Fe <[email protected]>

---------

Co-authored-by: ImxYJL <[email protected]>
Co-authored-by: soosoo22 <[email protected]>
Co-authored-by: Fe <[email protected]>

* [FE] ci: ๋ฆฌ์•กํŠธ ์ฟผ๋ฆฌ ๋ฐ msw ์„ค์น˜, eslint import rule ์ถ”๊ฐ€ ๋ฐ ์ ์šฉ (#44)

* ci: eslint ์˜ค๋ฅ˜ ์ˆ˜์ • ๋ฐ import rule ์ถ”๊ฐ€ ๋ฐ ๊ด€๋ จ ํ”Œ๋Ÿฌ๊ทธ์ธ ์„ค์น˜

- eslint-config-prettier
- eslint-plugin-import

Co-Authored-By: badahertz52 <[email protected]>
Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: Fe <[email protected]>

* style: eslint ์ ์šฉ์œผ๋กœ ์ธํ•œ ์ฝ”๋“œ ํฌ๋งทํŒ… ๋ณ€๊ฒฝ

import ์ˆœ์„œ ์ ์šฉ

Co-Authored-By: badahertz52 <[email protected]>
Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: Fe <[email protected]>

* ci: msw ์„ค์น˜

Co-Authored-By: badahertz52 <[email protected]>
Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: Fe <[email protected]>

---------

Co-authored-by: badahertz52 <[email protected]>
Co-authored-by: ImxYJL <[email protected]>
Co-authored-by: Fe <[email protected]>

* [BE] docs: Swagger๋ฅผ ํ™œ์šฉํ•œ API ๋ฌธ์„œ ์ž๋™ํ™” (#31)

* chore: swagger-ui ์„ค์ • ์ถ”๊ฐ€

* feat: swaggerConfig ์ถ”๊ฐ€

* docs: ์ปจํŠธ๋กค๋Ÿฌ์— swagger ์–ด๋…ธํ…Œ์ด์…˜ ์ถ”๊ฐ€

* docs: dto์— swagger ์–ด๋…ธํ…Œ์ด์…˜ ์ถ”๊ฐ€

* chore: api ๋ฌธ์„œ ์„ค์ • ํŒŒ์ผ ์ถ”๊ฐ€

* refactor: SwaggerConfig info ์„ค์ • ํŒŒ์ผ ๋ณ€์ˆ˜ ์ฐธ์กฐํ•˜๋„๋ก ๋ณ€๊ฒฝ

* docs: api ๋ฌธ์„œ์— ์ƒํƒœ์ฝ”๋“œ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋…ธ์ถœ๋˜๋„๋ก ๋ณ€๊ฒฝ

* chore: api ๋ฌธ์„œ ํŒŒ์ผ๋ช… ๋ณ€๊ฒฝ

* chore: api-docs ํ”„๋กœํผํ‹ฐ๋ช… ๋ณ€๊ฒฝ

* refactor: ํ”„๋กœํผํ‹ฐ ์ •๋ณด์™€ ์„ค์ • ํด๋ž˜์Šค ๋ถ„๋ฆฌ

* refactor: ์ปจํŠธ๋กค๋Ÿฌ ๋‚ด swagger ์–ด๋…ธํ…Œ์ด์…˜ ๋ถ„๋ฆฌ

---------

Co-authored-by: KIMGYUTAE <[email protected]>

* [BE] feat: ๋ฆฌ๋ทฐ ๋„๋ฉ”์ธ ๊ตฌ์ฒดํ™”, ์ •์ฑ… ๊ตฌํ˜„  (#43)

* feat: dto ๊ฒ€์ฆ์„ ์œ„ํ•œ ์˜์กด์„ฑ ์ถ”๊ฐ€

* feat: dto์— jakarta validation ์–ด๋…ธํ…Œ์ด์…˜ ์ถ”๊ฐ€

* feat: ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ์š”์ฒญ์„ ๊ฒ€์ฆํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค์ •

* feat: FieldError ๋‚ด์šฉ์„ ๋ณด์—ฌ์ค„ ์‘๋‹ต ๊ฐ์ฒด ์ƒ์„ฑ

* feat: FieldError ํ•ธ๋“ค๋Ÿฌ ์ถ”๊ฐ€

* refactor: ๋ฌธ์ž์—ด ๊ณต๋ฐฑ ๊ฒ€์ฆ์„ ์œ„ํ•ด NotBlank ์‚ฌ์šฉ

* style: todo ์ฃผ์„ ์ถ”๊ฐ€

* feat: ๋ฐ๋“œ๋ผ์ธ์ด ์ง€๋‚˜๋ฉด ๋ฆฌ๋ทฐ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์—†๋„๋ก ํ•˜๋Š” ๊ธฐ๋Šฅ ์ถ”๊ฐ€

* refactor: ์‚ฌ์ด์ฆˆ ๊ฒ€์ฆ๋ฌธ ์ œ๊ฑฐ

* style: ๊ฐœํ–‰ ๋ณ€๊ฒฝ

* refactor: ์˜ˆ์™ธ ์ด๋ฆ„์„ ๊ณผ๊ฑฐํ˜•์œผ๋กœ ๋ณ€๊ฒฝ

* refactor: RFC 9457 ํ˜•์‹์„ ์ง€ํ‚ค๋ฉด์„œ ํ•„๋“œ ์—๋Ÿฌ ์ •๋ณด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ์ˆ˜์ •

* chore: ์˜คํƒ€ ์ˆ˜์ •

* fix: conflict ํ•ด๊ฒฐ

* feat: dto์— jakarta validation ์–ด๋…ธํ…Œ์ด์…˜ ์ถ”๊ฐ€

* refactor: ๋ฌธ์ž์—ด ๊ณต๋ฐฑ ๊ฒ€์ฆ์„ ์œ„ํ•ด NotBlank ์‚ฌ์šฉ

* refactor: ์‚ฌ์ด์ฆˆ ๊ฒ€์ฆ๋ฌธ ์ œ๊ฑฐ

* [BE] feat: ํ‚ค์›Œ๋“œ ๋„๋ฉ”์ธ ๊ตฌ์ฒดํ™”, ์ •์ฑ… ๊ตฌํ˜„ (#40)

* feat: ํ‚ค์›Œ๋“œ ์ผ๊ธ‰ ์ปฌ๋ ‰์…˜ ๋ฐ ์ œ์•ฝ์‚ฌํ•ญ ๊ตฌํ˜„

* build: ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์—์„œ Lombok ์˜์กด์„ฑ ์ถ”๊ฐ€

* feat: ๋ฆฌ๋ทฐ์— ์ถ”๊ฐ€๋œ ํ‚ค์›Œ๋“œ ์‚ญ์ œ

* feat: ๋ฆฌ๋ทฐ์— ํ‚ค์›Œ๋“œ ์ถ”๊ฐ€

* feat: ์ผ๊ธ‰ ์ปฌ๋ ‰์…˜์˜ ์ด๋ฆ„์„ SelectedKeywords๋กœ ๋ณ€๊ฒฝ

* refactor: ํ‚ค์›Œ๋“œ ๊ฐœ์ˆ˜ ์ •์ฑ… 5๊ฐœ ๋ฐ˜์˜

* refactor: ์ค‘๋ณต ํ‚ค์›Œ๋“œ ๋ฉ˜ํŠธ ์ˆ˜์ •

* refactor: `deleteAll`๋กœ ๋ฉ”์„œ๋“œ๋ช… ์ˆ˜์ •

* refactor: `duplicated` -> `duplicate`๋กœ ์ˆ˜์ •

* refactor: ํ‚ค์›Œ๋“œ ๋™๋“ฑ์„ฑ ๋น„๊ต

* test: ํ‚ค์›Œ๋“œ ๋“ฑ๋ก ์‹œ ๊ธฐ์กด ํ‚ค์›Œ๋“œ ์‚ญ์ œ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ

* refactor: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํ•„๋“œ ์‚ญ์ œ

* style: add newlines between comments

* refactor: ํ‚ค์›Œ๋“œ ID ๊ธฐ๋ฐ˜ ๋น„๊ต

* refactor: id๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ detail ๋น„๊ต

* refactor: ํ‚ค์›Œ๋“œ ํ…Œ์ŠคํŠธ ๋„๋ฉ”์ธ ๊ธฐ๋ฐ˜์œผ๋กœ ์ˆ˜์ •

* [BE] feat: ๋ฆฌ๋ทฐ์–ด ๊ทธ๋ฃน ๋„๋ฉ”์ธ ๊ตฌ์ฒดํ™”, ์ •์ฑ… ๊ตฌํ˜„ (#45)

* feat: Member ์—”ํ‹ฐํ‹ฐ์— GitHub ID ์†์„ฑ ์ถ”๊ฐ€

* feat: ์ž‘์„ฑํ•œ ๋ฆฌ๋ทฐ์–ด๊ฐ€ ๋ฆฌ๋ทฐ์–ด ๊ทธ๋ฃน์— ์†ํ•˜๋Š”์ง€ ๊ฒ€์ฆ

* feat: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ์‹œ, ์ด๋ฏธ ์ž‘์„ฑํ•œ ๋ฆฌ๋ทฐ๊ฐ€ ์žˆ์ง€ ์•Š์€์ง€ ๊ฒ€์ฆ

* refactor: Review ์—”ํ‹ฐํ‹ฐ์˜ reviewer์™€์˜ ์—ฐ๊ด€๊ด€๊ณ„ ManyToOne์œผ๋กœ ๋ณ€๊ฒฝ

* refactor: ์ปฌ๋Ÿผ๋ช… ์˜ค๋ฅ˜ ์ˆ˜์ •

* refactor: gitHub ํ‘œ๊ธฐ -> github์œผ๋กœ ๋ณ€๊ฒฝ

* refactor: GithubReviewGroup -> GithubReviewGroup ํด๋ž˜์Šค๋ช… ๋ณ€๊ฒฝ

* refactor: ๋ˆ„๋ฝ๋œ @Column ์ถ”๊ฐ€

* test: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํ…Œ์ŠคํŠธ ์‹œ, ๊นƒํ—™ ์‚ฌ์šฉ์ž ๊ทธ๋ฃน ๋ฐ์ดํ„ฐ ์ €์žฅ ๋ถ€๋ถ„ ์ถ”๊ฐ€

* refactor: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ์‹œ, ์ค‘๋ณต ๋ฆฌ๋ทฐ ๊ฒ€์ฆ ๋กœ์ง ์ˆ˜์ •

* refactor: GithubReviewerGroupNotFoundException์„ UnAuthorizedException ๊ตฌํ˜„ํ•˜๋„๋ก ์ˆ˜์ •

* refactor: ReviewContentExistException -> ReviewAlreadySubmittedException ํด๋ž˜์Šค๋ช… ๋ณ€๊ฒฝ

* feat: UnAuthorizedException ์ถ”๊ฐ€

* refactor: ๋ฉ”์„œ๋“œ ์ˆœ์„œ ๋ณ€๊ฒฝ

* test: ๋ถˆํ•„์š”ํ•œ given์ ˆ ์‚ญ์ œ

* test: ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ๋ฐ์ดํ„ฐ ์‚ฝ์ž… repository๋ฅผ ํ™œ์šฉํ•˜๋„๋ก ๋ณ€๊ฒฝ

---------

Co-authored-by: Donghoon Lee <[email protected]>

* [FE] ๋ฆฌ๋ทฐ ์“ฐ๊ธฐ ํŽ˜์ด์ง€์— ํ™•์ •๋œ ๋””์ž์ธ์„ ๋ฐ˜์˜ํ•˜๊ณ , ๋ฆฌํŒฉํ„ฐ๋งํ•œ๋‹ค. (#53)

* fix: eslint์—์„œ ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ์ฝ์ง€ ๋ชปํ•˜๋Š” ์˜ค๋ฅ˜ ์ˆ˜์ •

์ ˆ๋Œ€ ๊ฒฝ๋กœ ์ง€์ •

Co-Authored-By: ImxYJL <[email protected]>

* design: ์‹œ์Šคํ…œ ๊ธฐ๋ณธ ํฐํŠธ ํฌ๊ธฐ ์ง€์ •

Co-Authored-By: ImxYJL <[email protected]>

* chore: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” import ์ œ๊ฑฐ

emotion.ts์—์„œ theme ์ œ๊ฑฐ

Co-Authored-By: ImxYJL <[email protected]>

* feat: ๊ณตํ†ต ๋ฒ„ํŠผ ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„

Co-Authored-By: ImxYJL <[email protected]>

* feat: ํ‚ค์›Œ๋“œ ๋ฒ„ํŠผ ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„

Co-Authored-By: ImxYJL <[email protected]>

* feat: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํŽ˜์ด์ง€ ํผ๋ธ”๋ฆฌ์‹ฑ ๋ฐ ์ปดํฌ๋„ŒํŠธ ๋ถ„๋ฆฌ

Co-Authored-By: ImxYJL <[email protected]>

* feat: ๋ฆฌ๋ทฐ์ด ์ฝ”๋ฉ˜ํŠธ ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„

Co-Authored-By: ImxYJL <[email protected]>

* refactor: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํŽ˜์ด์ง€์—์„œ ๋ฆฌ๋ทฐ ์•„์ดํ…œ ์ปดํฌ๋„ŒํŠธ ๋ถ„๋ฆฌ

Co-Authored-By: ImxYJL <[email protected]>

* refactor: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํŽ˜์ด์ง€ ๋ฆฌํŒฉํ„ฐ๋ง

- ๋ฆฌ๋ทฐ์ด ์ฝ”๋ฉ˜ํŠธ ์ถ”๊ฐ€
- ๋ฆฌ๋ทฐ ์•„์ดํ…œ ์ปดํฌ๋„ŒํŠธ ๋ถ„๋ฆฌ
- ๋ถ€๊ฐ€์ ์ธ ์Šคํƒ€์ผ๋ง

Co-Authored-By: ImxYJL <[email protected]>

---------

Co-authored-by: ImxYJL <[email protected]>

* [FE] feat: sidebar  ๋ฆฌํŒฉํ† ๋ง ๋ฐ ๊ธฐ๋Šฅ ์ถ”๊ฐ€  , topbar ์ถ”๊ฐ€, ๋ฐ˜์‘ํ˜• ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ ์ ์šฉ (#55)

* style: globalStyles.ts์—์„œ ๊ฒฝ๋กœ ๊ณต๋ฐฑ ์ถ”๊ฐ€

* docs: ๋ถˆํ•„์š”ํ•œ import ์‚ญ์ œ

Co-Authored-By: soosoo22 <[email protected]>

* design : theme ์ถ”๊ฐ€

- ์ถ”๊ฐ€๋œ theme : breakpoints, sidebarWidth

Co-Authored-By: soosoo22 <[email protected]>

* chore: Header ์ปดํฌ๋„ŒํŠธ ์‚ญ์ œ

Co-Authored-By: soosoo22 <[email protected]>

* feat : Topbar ์ƒ์„ฑ, logo ์ด๋ฏธ์ง€ ๋ณ€๊ฒฝ ๋ฐ SearchInput ์ƒ์„ฑ

- logo ์ด๋ฏธ์ง€ ๋ณ€๊ฒฝ
- Topbar์— ๋“ค์–ด๊ฐ€๋Š” ์ปดํฌ๋„ŒํŠธ๋“ค (SidebarOpenButtion, Logo )์ƒ์„ฑ
- userProfile ์ด๋ฏธ์ง€ ์ƒ์„ฑ
- ๊ณตํ†ต ์ปดํฌ๋„ŒํŠธ : SearchInput ui ์ƒ์„ฑ

Co-Authored-By: soosoo22 <[email protected]>

* feat : ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ ์ƒ์„ฑ

- ๋ ˆ์ด์•„์›ƒ ๊ด€๋ จ ์ปดํฌ๋„ŒํŠธ๋“ค ์ƒ์„ฑ

Co-Authored-By: soosoo22 <[email protected]>

* refactor : App์— ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ ์ ์šฉ

Co-Authored-By: soosoo22 <[email protected]>

* refactor: Sidebar ๋ฆฌํŒฉํ† ๋ง

- ๋ฉ”๋‰ด๋ช… ์ƒ์ˆ˜์ฒ˜๋ฆฌ
- ํ”ผ๊ทธ๋งˆ ๋””์ž์ธ ๋ณ€๊ฒฝ์— ๋”ฐ๋ฅธ ์ˆ˜์ •

Co-Authored-By: soosoo22 <[email protected]>

* feat: sidebar ์—ด๊ณ  ๋‹ซ๋Š” ๊ธฐ๋Šฅ ์ถ”๊ฐ€

Co-Authored-By: soosoo22 <[email protected]>

---------

Co-authored-by: soosoo22 <[email protected]>

* fix: ์ปดํŒŒ์ผ ์—๋Ÿฌ ํ•ด๊ฒฐ (#60)

Co-authored-by: nayonsoso <[email protected]>

* [FE] fix : stylelint ์ ์šฉ ์˜ค๋ฅ˜ ์ˆ˜์ •  (#66)

* fix: stylelint๋ฅผ ํ†ตํ•œ css ์†์„ฑ ์ •๋ ฌ ๊ธฐ๋Šฅ ์˜ค๋ฅ˜ ์ˆ˜์ •

- stylelint ๋ฒ„์ „16๊ณผ ์ถฉ๋Œ๋˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ ์‚ญ์ œ : stylelint-config-prettier, stylelint-prettier
- css ์ •๋ ฌ์— ํ•„์š”ํ•˜์ง€ ์•Š์€ ํ”Œ๋Ÿฌ๊ทธ์ธ ์‚ญ์ œ : stylelint-config-standard, stylelint-config-styled-componented, stylelint-webpack-plugin
- ์ถ”๊ฐ€๋กœ ์„ค์น˜ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ: postcss-syntax, @stylelint/postcss-css-in-js
- stylelint ์ ์šฉ script ์ถ”๊ฐ€
- .stylelintrc.json ์ˆ˜์ • : css ๊ด€๋ จ rule ์„ค์ •

* refactor: stylelint ์ ์šฉ์— ๋”ฐ๋ฅธ css ์†์„ฑ ์ •๋ ฌ

* ci: CI ์Šคํฌ๋ฆฝํŠธ ์ž‘์„ฑ (#70)

* [BE] test: ๊นƒํ—™ ๋ฆฌ๋ทฐ์–ด ๊ทธ๋ฃน์˜ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€ ๋ฐ fixture ๋ฏธ์ ์šฉ ๋ถ€๋ถ„ ๋ณด์™„ (#68)

* test: GithubReviewerGroupRepository ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

* test: ReviewServiceTest์— ํ…Œ์ŠคํŠธ fixture ์ ์šฉ

* test: given, when, then์ ˆ ์ถ”๊ฐ€

* test: given ๋ฐ์ดํ„ฐ ์˜ค๋ฅ˜ ์ˆ˜์ •

* [BE] chore: workflow ๋””๋ ‰ํ„ฐ๋ฆฌ ์ด๋™ (#74)

* chore: workflow ๋””๋ ‰ํ„ฐ๋ฆฌ ์ด๋™

* fix: ๋ฐฑ์—”๋“œ ๋””๋ ‰ํ„ฐ๋ฆฌ๋กœ ์ด๋™

* fix: ๋ฐฑ์—”๋“œ ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์ด๋™

* fix: checkout actions์˜ ๋””๋ ‰ํ† ๋ฆฌ ์„ค์ •

* fix: ๋””๋ ‰ํ† ๋ฆฌ ์„ค์ •...

* infra: CD ํŒŒ์ดํ”„๋ผ์ธ ์ž‘์„ฑ (#76)

* fix: cd gradle ๋””๋ ‰ํ† ๋ฆฌ ์ด๋™ (#77)

* [BE] refactor: ๋‹จ๊ฑด ๋ฆฌ๋ทฐ ์กฐํšŒ ์‹œ ๋ฆฌ๋ทฐ์–ด ์ •๋ณด ์‚ญ์ œ, ๋ฆฌ๋ทฐ ์ž‘์„ฑ ์‹œ์  ์ถ”๊ฐ€ (#65)

* refactor: ๋ฆฌ๋ทฐ ์กฐํšŒ ์‹œ ๋ฆฌ๋ทฐ ์ƒ์„ฑ ์‹œ๊ฐ ์ถ”๊ฐ€, ๋ฆฌ๋ทฐ์–ด ์ •๋ณด ์‚ญ์ œ

* fix: ํ…Œ์ŠคํŠธ ์–ด๋…ธํ…Œ์ด์…˜ ํ™œ์„ฑํ™” ๋ฐ ์ˆ˜์ •

* chore: ํ…Œ์ŠคํŠธ ํด๋ž˜์Šค ํŒจํ‚ค์ง€ ์ด๋™

* refactor: ๋ถˆํ•„์š”ํ•œ given์ ˆ ์ œ๊ฑฐ

* [FE] ๋ฆฌ๋ทฐ ์ž‘์„ฑ, ์ƒ์„ธ ๋ฆฌ๋ทฐ ๋ณด๊ธฐ ํŽ˜์ด์ง€์— ๋ฐฑ์—”๋“œ API ์—ฐ๋™ ๋ฐ dotenv-webpack ์„ค์น˜, BASE_URL์„ .env๋กœ ์ด๋™ (#78)

* chore: gitignore์— yarn-error.log ์ถ”๊ฐ€

* ci: env ํŒŒ์ผ ์‚ฌ์šฉ์„ ์œ„ํ•œ dotenv-webpack ์„ค์น˜

* refactor: ์—”๋“œํฌ์ธํŠธ์— env ํŒŒ์ผ์„ ํ†ตํ•œ API_BASE_URL ๊ฒฝ๋กœ ์ ์šฉ

* fix: ๋ฆฌ๋ทฐ ์ƒ์„ธ๋ณด๊ธฐ ๋ฐ์ดํ„ฐ์—์„œ ๋ฐฑ์—”๋“œ ์‘๋‹ต๊ณผ ์†์„ฑ ์ด๋ฆ„์ด ๋‹ฌ๋ž๋˜ ๋ถ€๋ถ„ ์ˆ˜์ •

* refactor: ๋ฐฑ์—”๋“œ ์‘๋‹ต ๋ฐ ๋ฆฌํŒฉํ† ๋ง๋œ ๋ฆฌ๋ทฐ ์“ฐ๊ธฐ ํ˜•์‹์— ๋งž๊ฒŒ ๋ฆฌ๋ทฐ ์“ฐ๊ธฐ ๋ชจํ‚น ๋ฐ์ดํ„ฐ ์ˆ˜์ •

* chore: ๋ถˆํ•„์š”ํ•œ console.log ์‚ญ์ œ

* [Fe] ์ ˆ๋Œ€ ๊ฒฝ๋กœ ์‚ฌ์šฉ ์‹œ ๋ฐœ์ƒํ•˜๋Š” eslint ์˜ค๋ฅ˜๋ฅผ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.  (#81)

* fix: stylelint๋ฅผ ํ†ตํ•œ css ์†์„ฑ ์ •๋ ฌ ๊ธฐ๋Šฅ ์˜ค๋ฅ˜ ์ˆ˜์ •

- stylelint ๋ฒ„์ „16๊ณผ ์ถฉ๋Œ๋˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ ์‚ญ์ œ : stylelint-config-prettier, stylelint-prettier
- css ์ •๋ ฌ์— ํ•„์š”ํ•˜์ง€ ์•Š์€ ํ”Œ๋Ÿฌ๊ทธ์ธ ์‚ญ์ œ : stylelint-config-standard, stylelint-config-styled-componented, stylelint-webpack-plugin
- ์ถ”๊ฐ€๋กœ ์„ค์น˜ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ: postcss-syntax, @stylelint/postcss-css-in-js
- stylelint ์ ์šฉ script ์ถ”๊ฐ€
- .stylelintrc.json ์ˆ˜์ • : css ๊ด€๋ จ rule ์„ค์ •

* refactor: stylelint ์ ์šฉ์— ๋”ฐ๋ฅธ css ์†์„ฑ ์ •๋ ฌ

* fix : ์ ˆ๋Œ€ ๊ฒฝ๋กœ ์‚ฌ์šฉ ์‹œ ์˜ค๋ฅ˜ ์ˆ˜์ •

์˜ค๋ฅ˜ : eslintimport/no-unresolved

* chore: eslintrc.cjs ์—์„œ ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ ์‚ญ์ œ

 node ํ™˜๊ฒฝ setting ์‚ญ์ œ

* [FE] ci: Jest, RTL ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ ๊ตฌ์ถ• (#84)

* fix: stylelint๋ฅผ ํ†ตํ•œ css ์†์„ฑ ์ •๋ ฌ ๊ธฐ๋Šฅ ์˜ค๋ฅ˜ ์ˆ˜์ •

- stylelint ๋ฒ„์ „16๊ณผ ์ถฉ๋Œ๋˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ ์‚ญ์ œ : stylelint-config-prettier, stylelint-prettier
- css ์ •๋ ฌ์— ํ•„์š”ํ•˜์ง€ ์•Š์€ ํ”Œ๋Ÿฌ๊ทธ์ธ ์‚ญ์ œ : stylelint-config-standard, stylelint-config-styled-componented, stylelint-webpack-plugin
- ์ถ”๊ฐ€๋กœ ์„ค์น˜ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ: postcss-syntax, @stylelint/postcss-css-in-js
- stylelint ์ ์šฉ script ์ถ”๊ฐ€
- .stylelintrc.json ์ˆ˜์ • : css ๊ด€๋ จ rule ์„ค์ •

* refactor: stylelint ์ ์šฉ์— ๋”ฐ๋ฅธ css ์†์„ฑ ์ •๋ ฌ

* fix : ์ ˆ๋Œ€ ๊ฒฝ๋กœ ์‚ฌ์šฉ ์‹œ ์˜ค๋ฅ˜ ์ˆ˜์ •

์˜ค๋ฅ˜ : eslintimport/no-unresolved

* chore: eslintrc.cjs ์—์„œ ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ ์‚ญ์ œ

 node ํ™˜๊ฒฝ setting ์‚ญ์ œ

* ci: jest ๋ฐ RTL ์„ค์น˜

* ci: jest ํƒ€์ž… ์„ค์ • ์ถ”๊ฐ€

* ci: CI๋ฅผ ์œ„ํ•œ yml ํŒŒ์ผ ํ…Œ์ŠคํŠธ

* fix: ์ž˜๋ชป ์˜ฌ๋ผ๊ฐ„ ํŒŒ์ผ ์‚ญ์ œ

---------

Co-authored-by: badahertz52 <[email protected]>

* [BE] refactor: ๋ฐœ์ƒํ•˜๋Š” ๋ชจ๋“  ์˜ˆ์™ธ์˜ ํ˜•์‹ ํ†ต์ผ (#69)

* refactor: ์ปค์Šคํ…€ ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋„๋ก ์ˆ˜์ •

* refactor: ๋ชจ๋“  ์˜ˆ์™ธ๋ฅผ ์žก์„ ์ˆ˜ ์žˆ๋„๋ก ์ˆ˜์ •

* refactor: ExceptionHandler๊ฐ€ ๋ฐ˜ํ™˜ํ•˜๋Š” ์˜ˆ์™ธ ์‘๋‹ต ํ˜•์‹ ๋ณ€๊ฒฝ

- ProblemDetail๋กœ ๋ณ€๊ฒฝ

* refactor: ResponseEntityExceptionHandler๋ฅผ ์ƒ์†ํ•˜์ง€ ์•Š๋„๋ก ๋ณ€๊ฒฝ

* feat: ResponseEntityExceptionHandler์—์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ์˜ˆ์™ธ๋ฅผ ์ง์ ‘ ํ•ธ๋“ค๋ง

* feat: CORS ์„ค์ • ์ถ”๊ฐ€ (#88)

* fix: ci PR ๋ธŒ๋žœ์น˜ ์„ค์ • (#92)

* refactor: ์˜ˆ์™ธ ํ•ธ๋“ค๋Ÿฌ ์ธ์ž ๋ณ€๊ฒฝ (#87)

* [BE] ๋„๋ฉ”์ธ ์—ฐ๊ด€๊ด€๊ณ„ ์žฌ์„ค์ • (#97)

* feat: ๊นƒํ—ˆ๋ธŒ ์•„์ด๋”” ์›์‹œ๊ฐ’ ํฌ์žฅ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* feat: ํšŒ์› `GithubId` ์‚ฌ์šฉ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* refactor: ํ‚ค์›Œ๋“œ ๋‚ด ์ปฌ๋Ÿผ ์ˆ˜์ • (content)

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* refactor: ์ผ๊ธ‰ ์ปฌ๋ ‰์…˜ ์ด๋ฆ„ ๋ณ€๊ฒฝ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* feat: ์งˆ๋ฌธ ์—”ํ‹ฐํ‹ฐ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* refactor: ๋‹ต๋ณ€ ๊ตฌ์กฐ ๋ณ€๊ฒฝ, ๊ธธ์ด ๊ฒ€์ฆ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* refactor: ํ‚ค์›Œ๋“œ ์—ฐ๊ด€๊ด€๊ณ„ ์—†์ด ์ฐธ์กฐํ•˜๋„๋ก ์„ค์ •

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* test: ๋‹ต๋ณ€ ๊ธธ์ด ํ…Œ์ŠคํŠธ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* feat: ๋ฆฌ๋ทฐ ์ƒ์„ฑ ์‹œ ํ‚ค์›Œ๋“œ ๋ฐ›์•„์„œ ์ƒ์„ฑ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* test: ๋ฆฌ๋ทฐ์–ด์™€ ๋ฆฌ๋ทฐ์ด ๊ฐ™์€ ๊ฒฝ์šฐ์˜ ์˜ˆ์™ธ ํ…Œ์ŠคํŠธ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* chore: ๋ฆฌ๋ทฐ-ํ‚ค์›Œ๋“œ ๋งคํ•‘ ํ…Œ์ด๋ธ” ์‚ญ์ œ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* fix: Fixture ์‚ฌ์šฉํ•ด ์ปดํŒŒ์ผ ์—๋Ÿฌ ํ•ด๊ฒฐ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* refactor: ์ผ๋Œ€๋‹ค ํŽธ์˜ ๋ฉ”์†Œ๋“œ ์ž‘์„ฑ,

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* feat: ๊นƒํ—ˆ๋ธŒ ์•„์ด๋”” ๊ทธ๋ฃน, ๋ฆฌ๋ทฐ์–ด ์—ฐ๊ด€๊ด€๊ณ„

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* feat: ๋ฆฌ๋ทฐ๊ทธ๋ฃน - ๋ฆฌ๋ทฐ ์ผ๋Œ€๋‹ค ๋‹จ๋ฐฉํ–ฅ ์—ฐ๊ด€๊ด€๊ณ„ ์ ์šฉ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* feat: ๋ฆฌ๋ทฐ๊ทธ๋ฃน - ๋ฆฌ๋ทฐ ์ผ๋Œ€๋‹ค ์–‘๋ฐฉํ–ฅ ์—ฐ๊ด€๊ด€๊ณ„ ์ ์šฉ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* feat: ๋ฆฌ๋ทฐ์–ด ๊ทธ๋ฃน ๊นƒํ—ˆ๋ธŒ ์•„์ด๋”” ๊ฒ€์ฆ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* feat: ์…€ํ”„๋ฆฌ๋ทฐ ๊ฒ€์ฆ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* chore: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํŒŒ์ผ ์‚ญ์ œ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* feat: ๋ฆฌ๋ทฐ ์ถ”๊ฐ€ ๊ฒ€์ฆ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* fix: ์ˆœํ™˜ ์ฐธ์กฐ NPE ํ•ด๊ฒฐ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* chore: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” import ์ œ๊ฑฐ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* chore: Github ID ํŒจํ‚ค์ง€ ์ด๋™

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* feat: ๋ฆฌ๋ทฐ - ๋ฆฌ๋ทฐ ๋‹ต๋ณ€ ์—ฐ๊ด€๊ด€๊ณ„ ์„ค์ •

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* chore: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ฝ”๋“œ ์ œ๊ฑฐ

* refactor: ๋‚ด๊ฐ€ ๋ฐ›์€ ๋ฆฌ๋ทฐ ์ƒ์„ธ ๋ณด๊ธฐ ๊ตฌํ˜„

---------

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* [FE] feat: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํŽ˜์ด์ง€ ๊ธฐ๋Šฅ ๊ตฌํ˜„ (#89)

* fix: stylelint๋ฅผ ํ†ตํ•œ css ์†์„ฑ ์ •๋ ฌ ๊ธฐ๋Šฅ ์˜ค๋ฅ˜ ์ˆ˜์ •

- stylelint ๋ฒ„์ „16๊ณผ ์ถฉ๋Œ๋˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ ์‚ญ์ œ : stylelint-config-prettier, stylelint-prettier
- css ์ •๋ ฌ์— ํ•„์š”ํ•˜์ง€ ์•Š์€ ํ”Œ๋Ÿฌ๊ทธ์ธ ์‚ญ์ œ : stylelint-config-standard, stylelint-config-styled-componented, stylelint-webpack-plugin
- ์ถ”๊ฐ€๋กœ ์„ค์น˜ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ: postcss-syntax, @stylelint/postcss-css-in-js
- stylelint ์ ์šฉ script ์ถ”๊ฐ€
- .stylelintrc.json ์ˆ˜์ • : css ๊ด€๋ จ rule ์„ค์ •

* refactor: stylelint ์ ์šฉ์— ๋”ฐ๋ฅธ css ์†์„ฑ ์ •๋ ฌ

* chore: ํ˜„์žฌ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ์ €์žฅ ๋ฒ„ํŠผ ์ˆจ๊น€ ์ฒ˜๋ฆฌ

* design: ๊ธฐ๋ณธ ํฐํŠธ ์‚ฌ์ด์ฆˆ ๋ณ€๊ฒฝ

- 15px -> 16px๋กœ ์ˆ˜์ •

* fix : ์ ˆ๋Œ€ ๊ฒฝ๋กœ ์‚ฌ์šฉ ์‹œ ์˜ค๋ฅ˜ ์ˆ˜์ •

์˜ค๋ฅ˜ : eslintimport/no-unresolved

* design: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํŽ˜์ด์ง€์˜ ์ˆ˜์ •๋œ ๋””์ž์ธ ์ ์šฉ

- ์ƒ‰์ƒ ์ฝ”๋“œ ์ˆ˜์ •
- ๋ฒ„ํŠผ ํ˜ธ๋ฒ„ ์‹œ ์Šคํƒ€์ผ๋ง ์ˆ˜์ •
- ๋ฆฌ๋ทฐ ๋งˆ๊ฐ์ผ ๋‚ ์งœ ํ˜•์‹ ๋ณ€๊ฒฝ

* design: ๋ฆฌ๋ทฐ ์งˆ๋ฌธ์— ์•ˆ๋‚ด ๋ฌธ๊ตฌ ๋ฐ placeholder ์ถ”๊ฐ€

- ๊ฐ ์งˆ๋ฌธ์— ' (20์ž ์ด์ƒ)' ๋ฌธ๊ตฌ ํ•˜๋“œ์ฝ”๋”ฉ
- ์ตœ๋Œ€ 1000์ž ์ž…๋ ฅ ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๋ฌธ๊ตฌ๋ฅผ textarea์˜ placeholder๋กœ ์ถ”๊ฐ€

* chore: eslintrc.cjs ์—์„œ ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ ์‚ญ์ œ

 node ํ™˜๊ฒฝ setting ์‚ญ์ œ

* chore: api๋ช… ๋ฐ endpoint๋ช… ์ˆ˜์ •

* chore: ๋ฆฌ๋ทฐ ์งˆ๋ฌธ ๋ชฉ๋ก์„ ์„œ๋ฒ„์—์„œ ๋ฐ›์•„์˜ค๊ธฐ ์œ„ํ•ด ์ƒ์ˆ˜ ์ œ๊ฑฐ

* chore: api ๋ฌธ์„œ ํ˜•์‹์— ๋งž๊ฒŒ ๋ฐ์ดํ„ฐ ํƒ€์ž… ์ˆ˜์ •

* fix: ํ‚ค์›Œ๋“œ ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„ ๋•Œ ํผ์ด ์ œ์ถœ๋˜๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ

* feat: ์ž‘์„ฑํ•œ ๋ฆฌ๋ทฐ ๋‚ด์šฉ์„ ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์˜ ์ƒํƒœ์™€ ๋™๊ธฐํ™”ํ•˜๋„๋ก ์„ค์ •

* design: textarea์˜ ํฌ๊ธฐ๋ฅผ ๊ณ ์ •์‹œํ‚ค๊ณ , ๋„˜์–ด๊ฐˆ ๊ฒฝ์šฐ ์Šคํฌ๋กค ๋˜๋„๋ก ๋ณ€๊ฒฝ

* design: ๊ณตํ†ต ๋ฒ„ํŠผ ์ปดํฌ๋„ŒํŠธ์— ์กฐ๊ฑด๋ถ€ ์Šคํƒ€์ผ๋ง ๊ตฌํ˜„

* design: disabled ๊ด€๋ จ ์ƒ‰์ƒ ๋ณ€์ˆ˜ ์ถ”๊ฐ€

* feat: ๋ชจ๋“  ํผ์„ ์ž‘์„ฑํ–ˆ์„ ๋•Œ ์ œ์ถœ ๋ฒ„ํŠผ์ด ํ™œ์„ฑํ™”๋˜๋„๋ก ๊ตฌํ˜„, ํ‚ค์›Œ๋“œ ์„ ํƒ ๋กœ์ง ๊ตฌํ˜„

* feat: ์ œ์ถœ ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ confirm ๋ฐœ์ƒ, ํ•œ ๋ฒˆ ๋” ํ™•์ธ ์‹œ ์ œ์ถœ๋˜๋„๋ก ๊ตฌํ˜„

* feat: ํ‚ค์›Œ๋“œ ๋ฒ„ํŠผ์„ 5๊ฐœ ์ดˆ๊ณผํ•ด์„œ ์„ ํƒํ•  ์ˆ˜ ์—†๋„๋ก ๊ตฌํ˜„

* feat: textarea์— 1000์ž๋ฅผ ์ดˆ๊ณผํ•ด์„œ ์ž…๋ ฅํ•  ์ˆ˜ ์—†๋„๋ก ๊ตฌํ˜„ ๋ฐ ํ˜„์žฌ ๊ธ€์ž์ˆ˜ ํ‘œ์‹œ

* fix: ์ด๋ฏธ ์„ ํƒ๋œ ํ‚ค์›Œ๋“œ๋ฅผ ํ•ด์ œํ•˜๋ ค ํ•ด๋„ ๊ฐœ์ˆ˜ ์ œํ•œ๋˜๋Š” ์˜ค๋ฅ˜ ์ˆ˜์ •

* refactor: ํผ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ์กฐ๊ฑด๋“ค์„ ๋ณ€์ˆ˜๋กœ ๋ถ„๋ฆฌ

* design: ํ‚ค์›Œ๋“œ ๋ฒ„ํŠผ๋“ค์˜ ํฌ๊ธฐ๋ฅผ fit-content๋กœ ๋ณ€๊ฒฝ ๋ฐ ๊ฐ€๋กœ๋กœ ๋‚˜์—ดํ•˜๋„๋ก ์ˆ˜์ •

* chore: api ์—ฐ๊ฒฐ ์ด์ „, ์ž„์‹œ๋กœ ํผ ์ •๋ณด๋ฅผ ์ฝ˜์†”์— ์ถœ๋ ฅํ•˜๋„๋ก ์„ค์ •

* chore: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ์™„๋ฃŒ ํŽ˜์ด์ง€ ๋ผ์šฐํ„ฐ ์ถ”๊ฐ€

* feat: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ์™„๋ฃŒ ํŽ˜์ด์ง€ ๋ฐ ์ž‘์„ฑ ์™„๋ฃŒ ์‹œ ํŽ˜์ด์ง€ ์ด๋™ ๊ธฐ๋Šฅ ๊ตฌํ˜„

* refactor: ๋ฆฌ๋ทฐ ์•„์ดํ…œ ์ปดํฌ๋„ŒํŠธ ๋งค์ง๋„˜๋ฒ„ ์ƒ์ˆ˜ํ™”

* chore: ์‹œ๊ณ„ ์•„์ด์ฝ˜ ์Šคํƒ€์ผ ์ปดํฌ๋„ŒํŠธํ™”

* refactor: ๋ฆฌ๋ทฐ ๊ด€๋ จ ๋ฉ”์‹œ์ง€ ์ƒ์ˆ˜ ๋ถ„๋ฆฌ

* design: ๋ฆฌ๋ทฐ ์ž‘์„ฑ๋ž€ placeholder ๋ฐ ๋ณธ๋ฌธ font weight ๋ณ€๊ฒฝ

* refactor: ๋ฆฌ๋ทฐ ๋ฌธํ•ญ ๋ฒˆํ˜ธ ๋™์ ์œผ๋กœ ๋ถ€์—ฌํ•˜๋„๋ก ๋ณ€๊ฒฝ ๋ฐ ์ƒ์ˆ˜ํ™” ์ ์šฉ

* refactor: on-, handle- prefix ๊ด€๋ จ ์ปจ๋ฒค์…˜ ์ ์šฉ ๋ฐ ํ‚ค์›Œ๋“œ ๋ฒ„ํŠผ ์ธํ„ฐํŽ˜์ด์Šค ํ™•์žฅ

* chore: ๋ฆฌ๋ทฐ ๋‹ต๋ณ€์˜ ๊ธธ์ด๊ฐ€ ์œ ํšจํ•œ์ง€ ์ฒดํฌํ•˜๋Š” ๋ณ€์ˆ˜์˜ ์ด๋ฆ„์„ ์˜๋ฏธ๋ฅผ ์ž˜ ๋“œ๋Ÿฌ๋‚ด๋„๋ก ์ˆ˜์ •

* refactor: ๊ณตํ†ต ๋ฒ„ํŠผ์˜ ํƒ€์ž…๋ณ„ ์Šคํƒ€์ผ์„ ํ•จ์ˆ˜๋กœ ๋ถ„๋ฆฌ

* style: api ํ˜ธ์ถœ ํ•จ์ˆ˜๋ช… ์ปจ๋ฒค์…˜์— ๋งž๊ฒŒ ์ˆ˜์ •

* chore: ๋ถˆํ•„์š”ํ•œ PropsWithChildren import ์ œ๊ฑฐ

---------

Co-authored-by: badahertz52 <[email protected]>

* [FE] MSW๋ฅผ mock server๋กœ ์…‹ํŒ… (#95)

* fix: stylelint๋ฅผ ํ†ตํ•œ css ์†์„ฑ ์ •๋ ฌ ๊ธฐ๋Šฅ ์˜ค๋ฅ˜ ์ˆ˜์ •

- stylelint ๋ฒ„์ „16๊ณผ ์ถฉ๋Œ๋˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ ์‚ญ์ œ : stylelint-config-prettier, stylelint-prettier
- css ์ •๋ ฌ์— ํ•„์š”ํ•˜์ง€ ์•Š์€ ํ”Œ๋Ÿฌ๊ทธ์ธ ์‚ญ์ œ : stylelint-config-standard, stylelint-config-styled-componented, stylelint-webpack-plugin
- ์ถ”๊ฐ€๋กœ ์„ค์น˜ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ: postcss-syntax, @stylelint/postcss-css-in-js
- stylelint ์ ์šฉ script ์ถ”๊ฐ€
- .stylelintrc.json ์ˆ˜์ • : css ๊ด€๋ จ rule ์„ค์ •

* refactor: stylelint ์ ์šฉ์— ๋”ฐ๋ฅธ css ์†์„ฑ ์ •๋ ฌ

* fix : ์ ˆ๋Œ€ ๊ฒฝ๋กœ ์‚ฌ์šฉ ์‹œ ์˜ค๋ฅ˜ ์ˆ˜์ •

์˜ค๋ฅ˜ : eslintimport/no-unresolved

* chore: eslintrc.cjs ์—์„œ ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ ์‚ญ์ œ

 node ํ™˜๊ฒฝ setting ์‚ญ์ œ

* style: eslint ์ ์šฉ์— ๋”ฐ๋ฅธ ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€ import ์ˆœ์„œ ์ •๋ฆฌ

* refactor: formatDate๋ฅผ utils/date ํŒŒ์ผ๋กœ ์ด๋™

* design: theme์— colors,, fontSize ๋ณ€๊ฒฝ ๋ฐ borderRadius ์ถ”๊ฐ€

* feat: MultilineTextViewer ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ

- ๊ฐœํ–‰์ด ํฌํ•จ๋œ string์— ๊ฐœํ–‰์„ ์ ์šฉํ•ด์„œ ๋ณด์—ฌ์ฃผ๋Š” ์ปดํฌ๋„ŒํŠธ

* feat: ๊นƒํ—ˆ๋ธŒ ์ €์žฅ์†Œ ์ด๋ฏธ์ง€ ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ

* feat: ๋ฆฌ๋ทฐ์™€ ๊ด€๋ จ๋œ ๋‚ ์งœ UI ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ

* featr: LockButton ์‚ญ์ œ LockToggle ์ถ”๊ฐ€

* refactor: ํ”ผ๊ทธ๋งˆ ๋””์ž์ธ ๋ณ€๊ฒฝ์— ๋”ฐ๋ฅธ ReviewDescription ๋ณ€๊ฒฝ

* feat: ReviewComment ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ

* refactor: ReviewViewSection -> ReviewSection ์œผ๋กœ ๋ณ€๊ฒฝ ๋ฐ ๋ฆฌํŒฉํ† ๋ง

- ๋ถˆํ•„์š”ํ•œ  ์ปดํฌ๋„ŒํŠธ ์‚ญ์ œ : RevieAnswer , ReviewQuestion

* refactor: DetailedReviewPage ๋ฆฌํŒฉํ† ๋ง

- ๋ชฉ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ
-  ์ถ”๊ฐ€ ๋ฐ ๋ณ€๊ฒฝ๋œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•ด ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€ ์ปดํฌ๋„ŒํŠธ(DetailedReviewPage) ๋ฆฌํŒฉํ† ๋ง
- DetailedReviewPage ํด๋”์˜ styles.ts ์‚ญ์ œ

* refactor: review์— ๋Œ€ํ•œ ํƒ€์ž… ๋ณ€๊ฒฝ

* design : ReviewDate์˜ ํด๋ก  ์Šคํƒ€์ผ ์ ์šฉ

* feat: KeywordSection ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ

- ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€ ํ‚ค์›Œ๋“œ ๋ถ€๋ถ„ ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ

* feat: ReviewSectionHeader ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ ๋ฐ ์ ์šฉ

- ๋ฆฌ๋ทฐ ์ƒ์„ธ๋ณด๊ธฐ์—์„œ ๋ฐ˜๋ณต๋˜๋Š” ์งˆ๋ฌธ,ํ‚ค์›Œ๋“œ ํ—ค๋”๋ถ€๋ถ„์„ ์ปดํฌ๋„ŒํŠธ๋กœ ๋ถ„๋ฆฌ

* design : ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€์— width ๋ณ€๊ฒฝ

* refactor: DetailedReview์˜ ๋ชฉ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ๋ฐ ๋ฆฌํŒฉํ† ๋ง

- ํƒ€์ž… ๋ณ€๊ฒฝ์— ๋”ฐ๋ฅธ ๋ชฉ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ
- KeywordSection ์ ์šฉ

* design : formWidth๋ฅผ theme์— ์ถ”๊ฐ€ ๋ฐ ๋ฆฌ๋ทฐ ์ž‘์„ฑ/๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€์— ์ ์šฉ

* fix: Layout์—์„œ ๊ฐ€๋กœ ์Šคํฌ๋กค ์ƒ๊ธฐ๋Š” ์˜ค๋ฅ˜ ์ˆ˜์ •

- 100vw๋Š” ์Šคํฌ๋กค์„ ํฌํ•จํ•œ ๋ทฐํฌํŠธ ๋„ˆ๋น„๋ผ์„œ 100%์œผ๋กœ ์ˆ˜์ •

* feat: ๋ฆฌ๋ทฐ ์ƒํŽ˜์ด์ง€ router์— ๋ผ์šฐํ„ฐ ํŒŒ๋ผ๋ฏธํ„ฐ ์ ์šฉ ๋ฐ ๊ด€๋ จ ์„ค์ • ๋ณ€๊ฒฝ

- ๋ฐ๋ชจ๋ฐ์ด๋ฅผ ์œ„ํ•ด ํ˜„์žฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์žˆ๋Š” ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€ id๋ฅผ sidebar์˜ ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€ ๋ฉ”๋‰ด link์— ์ ์šฉ
- ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€(DetailedReviewPage)์˜ api ํ•ธ๋“ค๋Ÿฌ ์ˆ˜์ •

* docs: ๋ณ€์ˆ˜๋ช… ๋ณ€๊ฒฝ (isLock -> isPublic)

* refactor: ๊นƒํ—™ ์ €์žฅ์†Œ ๋กœ๊ณ  ์ฃผ์†Œ ๋ณ€์ˆ˜๋ช… ๋ณ€๊ฒฝ

- projectImgSrc -> thumbnailUrl

* ci: msw ๊ด€๋ จ ํŒจํ‚ค์ง€ ์„ค์น˜

* ci: msw ๊ด€๋ จ ์„ค์ •ํŒŒ์ผ ์ถ”๊ฐ€

- ๋ธŒ๋ผ์šฐ์ € ํ™˜๊ฒฝ, node ํ™˜๊ฒฝ์—์„œ msw๋กœ ๋ชฉ์„œ๋ฒ„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ด€๋ จ ํŒŒ์ผ ์ถ”๊ฐ€

* feat: mock ํ•ธ๋“ค๋Ÿฌ ์ถ”๊ฐ€ ๋ฐ ์ƒ์„ธ ๋ฆฌ๋ทฐ ํŽ˜์ด์ง€ ๋ชฉ ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€

* feat:  root์—์„œ ๋ชฉ์„œ๋ฒ„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋กํ•จ

* refactor: endpoint ์ˆ˜์ •

- env ์—์„œ ์„œ๋ฒ„ ์ฃผ์†Œ ๋์— ์Šฌ๋ž˜์‹œ ๋„ฃ๋Š” ๊ฒƒ์œผ๋กœ ํ†ต์ผ

* feat: ์ƒ์„ธ ๋ฆฌ๋ทฐ ํŽ˜์ด์ง€(detailedReviewPage)์— ๋ชฉ์„œ๋ฒ„ ์—ฐ๊ฒฐ ๋ฐ ๊ด€๋ จ ์ฝ”๋“œ ์ˆ˜์ •

- ์ƒํƒœ๋ช… ๋ณ€๊ฒฝ: detailReview -> detailedReview
- detailedReview ํƒ€์ž…์— null ์ถ”๊ฐ€ ๋ฐ ๊ทธ์— ๋”ฐ๋ฅธ ์˜ค๋ฅ˜ ํ•ธ๋“ค๋ง ์ถ”๊ฐ€
- deadline์— string ํƒ€์ž…์œผ๋กœ response๋กœ ์ „๋‹ฌ๋˜์–ด์„œ new Date๋กœ ๊ฐ์‹ธ์„œ props๋กœ ์ „๋‹ฌ

* docs: indexhtml์˜ title ๋ณ€๊ฒฝ

* style: apis/review.ts ์˜ import ๊ด€๋ จ eslint rule ์ ์šฉ์— ๋”ฐ๋ฅธ ์ˆ˜์ •

* fix: ts์—์„œ process ์ฝ์ง€ ๋ชปํ•˜๋Š” ์˜ค๋ฅ˜ ์ˆ˜์ •

* fix: webpack dev server script ๋ณต์›

* [FE] ์ƒ์„ธ ๋ฆฌ๋ทฐ ํŽ˜์ด์ง€ : url router ์—ฐ๋™, ๋ณ€๊ฒฝ๋œ ๋””์ž์ธ ๋ฐ˜์˜ ๋ฐ ์„œ๋ฒ„์—์„œ api๋ฅผ ์—ฐ๋™ (#91)

* fix: stylelint๋ฅผ ํ†ตํ•œ css ์†์„ฑ ์ •๋ ฌ ๊ธฐ๋Šฅ ์˜ค๋ฅ˜ ์ˆ˜์ •

- stylelint ๋ฒ„์ „16๊ณผ ์ถฉ๋Œ๋˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ ์‚ญ์ œ : stylelint-config-prettier, stylelint-prettier
- css ์ •๋ ฌ์— ํ•„์š”ํ•˜์ง€ ์•Š์€ ํ”Œ๋Ÿฌ๊ทธ์ธ ์‚ญ์ œ : stylelint-config-standard, stylelint-config-styled-componented, stylelint-webpack-plugin
- ์ถ”๊ฐ€๋กœ ์„ค์น˜ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ: postcss-syntax, @stylelint/postcss-css-in-js
- stylelint ์ ์šฉ script ์ถ”๊ฐ€
- .stylelintrc.json ์ˆ˜์ • : css ๊ด€๋ จ rule ์„ค์ •

* refactor: stylelint ์ ์šฉ์— ๋”ฐ๋ฅธ css ์†์„ฑ ์ •๋ ฌ

* fix : ์ ˆ๋Œ€ ๊ฒฝ๋กœ ์‚ฌ์šฉ ์‹œ ์˜ค๋ฅ˜ ์ˆ˜์ •

์˜ค๋ฅ˜ : eslintimport/no-unresolved

* chore: eslintrc.cjs ์—์„œ ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ ์‚ญ์ œ

 node ํ™˜๊ฒฝ setting ์‚ญ์ œ

* style: eslint ์ ์šฉ์— ๋”ฐ๋ฅธ ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€ import ์ˆœ์„œ ์ •๋ฆฌ

* refactor: formatDate๋ฅผ utils/date ํŒŒ์ผ๋กœ ์ด๋™

* design: theme์— colors,, fontSize ๋ณ€๊ฒฝ ๋ฐ borderRadius ์ถ”๊ฐ€

* feat: MultilineTextViewer ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ

- ๊ฐœํ–‰์ด ํฌํ•จ๋œ string์— ๊ฐœํ–‰์„ ์ ์šฉํ•ด์„œ ๋ณด์—ฌ์ฃผ๋Š” ์ปดํฌ๋„ŒํŠธ

* feat: ๊นƒํ—ˆ๋ธŒ ์ €์žฅ์†Œ ์ด๋ฏธ์ง€ ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ

* feat: ๋ฆฌ๋ทฐ์™€ ๊ด€๋ จ๋œ ๋‚ ์งœ UI ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ

* featr: LockButton ์‚ญ์ œ LockToggle ์ถ”๊ฐ€

* refactor: ํ”ผ๊ทธ๋งˆ ๋””์ž์ธ ๋ณ€๊ฒฝ์— ๋”ฐ๋ฅธ ReviewDescription ๋ณ€๊ฒฝ

* feat: ReviewComment ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ

* refactor: ReviewViewSection -> ReviewSection ์œผ๋กœ ๋ณ€๊ฒฝ ๋ฐ ๋ฆฌํŒฉํ† ๋ง

- ๋ถˆํ•„์š”ํ•œ  ์ปดํฌ๋„ŒํŠธ ์‚ญ์ œ : RevieAnswer , ReviewQuestion

* refactor: DetailedReviewPage ๋ฆฌํŒฉํ† ๋ง

- ๋ชฉ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ
-  ์ถ”๊ฐ€ ๋ฐ ๋ณ€๊ฒฝ๋œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•ด ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€ ์ปดํฌ๋„ŒํŠธ(DetailedReviewPage) ๋ฆฌํŒฉํ† ๋ง
- DetailedReviewPage ํด๋”์˜ styles.ts ์‚ญ์ œ

* refactor: review์— ๋Œ€ํ•œ ํƒ€์ž… ๋ณ€๊ฒฝ

* design : ReviewDate์˜ ํด๋ก  ์Šคํƒ€์ผ ์ ์šฉ

* feat: KeywordSection ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ

- ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€ ํ‚ค์›Œ๋“œ ๋ถ€๋ถ„ ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ

* feat: ReviewSectionHeader ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ ๋ฐ ์ ์šฉ

- ๋ฆฌ๋ทฐ ์ƒ์„ธ๋ณด๊ธฐ์—์„œ ๋ฐ˜๋ณต๋˜๋Š” ์งˆ๋ฌธ,ํ‚ค์›Œ๋“œ ํ—ค๋”๋ถ€๋ถ„์„ ์ปดํฌ๋„ŒํŠธ๋กœ ๋ถ„๋ฆฌ

* design : ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€์— width ๋ณ€๊ฒฝ

* refactor: DetailedReview์˜ ๋ชฉ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ๋ฐ ๋ฆฌํŒฉํ† ๋ง

- ํƒ€์ž… ๋ณ€๊ฒฝ์— ๋”ฐ๋ฅธ ๋ชฉ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ
- KeywordSection ์ ์šฉ

* design : formWidth๋ฅผ theme์— ์ถ”๊ฐ€ ๋ฐ ๋ฆฌ๋ทฐ ์ž‘์„ฑ/๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€์— ์ ์šฉ

* fix: Layout์—์„œ ๊ฐ€๋กœ ์Šคํฌ๋กค ์ƒ๊ธฐ๋Š” ์˜ค๋ฅ˜ ์ˆ˜์ •

- 100vw๋Š” ์Šคํฌ๋กค์„ ํฌํ•จํ•œ ๋ทฐํฌํŠธ ๋„ˆ๋น„๋ผ์„œ 100%์œผ๋กœ ์ˆ˜์ •

* feat: ๋ฆฌ๋ทฐ ์ƒํŽ˜์ด์ง€ router์— ๋ผ์šฐํ„ฐ ํŒŒ๋ผ๋ฏธํ„ฐ ์ ์šฉ ๋ฐ ๊ด€๋ จ ์„ค์ • ๋ณ€๊ฒฝ

- ๋ฐ๋ชจ๋ฐ์ด๋ฅผ ์œ„ํ•ด ํ˜„์žฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์žˆ๋Š” ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€ id๋ฅผ sidebar์˜ ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€ ๋ฉ”๋‰ด link์— ์ ์šฉ
- ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€(DetailedReviewPage)์˜ api ํ•ธ๋“ค๋Ÿฌ ์ˆ˜์ •

* docs: ๋ณ€์ˆ˜๋ช… ๋ณ€๊ฒฝ (isLock -> isPublic)

* refactor: ๊นƒํ—™ ์ €์žฅ์†Œ ๋กœ๊ณ  ์ฃผ์†Œ ๋ณ€์ˆ˜๋ช… ๋ณ€๊ฒฝ

- projectImgSrc -> thumbnailUrl

* refactor: ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€ api ๋ณ€๊ฒฝ์— ๋”ฐ๋ฅธ ์ˆ˜์ •

- ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€ keyword ํƒ€์ž… ๋ณ€๊ฒฝ
- api endpoint ๋ณ€๊ฒฝ , router ๋ณ€๊ฒฝ, sidebar ์ƒ์„ธ๋ณด๊ธฐ ๊ฒฝ๋กœ ๋ณ€๊ฒฝ
- useState์— ๋นˆ ๊ฐ’์— ๋Œ€ํ•œ ํƒ€์ž… ์ถ”๋ก  ์‚ฌ์šฉ

* [BE] test: ๋„๋ฉ”์ธ ์—ฐ๊ด€๊ด€๊ณ„ ์žฌ์„ค์ • ํ›„ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ (#101)

* test: ๋ฆฌ๋ทฐ์–ด ๊ทธ๋ฃน ํ…Œ์ŠคํŠธ ์ž‘์„ฑ

* refactor: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํ…Œ์ŠคํŠธ๋ฅผ `ReviewTest`๋กœ ์ด๋™

* test: ๋ฆฌ๋ทฐ์–ด ์ค‘๋ณต ์ถ”๊ฐ€ ํ…Œ์ŠคํŠธ

* refactor: Test Fixture ์‚ฌ์šฉํ•˜๋„๋ก ์ˆ˜์ •

* refactor: ์˜ˆ์™ธ ํด๋ž˜์Šค๋ช… ํ†ต์ผ

* style: ํ…Œ์ŠคํŠธ ๊ฐœํ–‰

* refactor: ํ…Œ์ŠคํŠธ๋ช… ๋ช…ํ™•ํ•˜๊ฒŒ ์ˆ˜์ •

* refactor: ํšŒ์› ๋„๋ฉ”์ธ์—์„œ์˜ ๋น„๊ต๋ฅผ GithubId๋กœ ์ง„ํ–‰ํ•˜๋„๋ก ์ˆ˜์ •

* refactor: createdAt ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ , deadline์œผ๋กœ ์ˆ˜์ •

* refactor: ํ•„๋“œ๋ช… reviewerGithubIds๋กœ ํ†ต์ผ

* test: ๋ฆฌ๋ทฐ์–ด ์ค‘๋ณต ์ƒ์„ฑ ๊ฒ€์ฆ

* refactor: reviewer/reviewee ํ†ต์ผ

* refactor: ๋ฆฌ๋ทฐ์–ด-๋ฆฌ๋ทฐ์ด github id๋ฅผ ๋ช…์‹œ

* refactor: ํ…Œ์ŠคํŠธ์— ํ•˜๋‚˜์˜ ๊ฒ€์ฆ๋งŒ ์ง„ํ–‰๋˜๋„๋ก ์ˆ˜์ •

* [FE] feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํŽ˜์ด์ง€ ๊ธฐ๋Šฅ ๊ตฌํ˜„ (#90)

* fix: stylelint๋ฅผ ํ†ตํ•œ css ์†์„ฑ ์ •๋ ฌ ๊ธฐ๋Šฅ ์˜ค๋ฅ˜ ์ˆ˜์ •

- stylelint ๋ฒ„์ „16๊ณผ ์ถฉ๋Œ๋˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ ์‚ญ์ œ : stylelint-config-prettier, stylelint-prettier
- css ์ •๋ ฌ์— ํ•„์š”ํ•˜์ง€ ์•Š์€ ํ”Œ๋Ÿฌ๊ทธ์ธ ์‚ญ์ œ : stylelint-config-standard, stylelint-config-styled-componented, stylelint-webpack-plugin
- ์ถ”๊ฐ€๋กœ ์„ค์น˜ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ: postcss-syntax, @stylelint/postcss-css-in-js
- stylelint ์ ์šฉ script ์ถ”๊ฐ€
- .stylelintrc.json ์ˆ˜์ • : css ๊ด€๋ จ rule ์„ค์ •

* refactor: stylelint ์ ์šฉ์— ๋”ฐ๋ฅธ css ์†์„ฑ ์ •๋ ฌ

* fix : ์ ˆ๋Œ€ ๊ฒฝ๋กœ ์‚ฌ์šฉ ์‹œ ์˜ค๋ฅ˜ ์ˆ˜์ •

์˜ค๋ฅ˜ : eslintimport/no-unresolved

* chore: eslintrc.cjs ์—์„œ ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ ์‚ญ์ œ

 node ํ™˜๊ฒฝ setting ์‚ญ์ œ

* feat: DropDown ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„

- ์‚ฌ์šฉ์ž ์„ ํƒ์„ ์œ„ํ•œ `DropDown` ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ตฌํ˜„
- `onChange` ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ์™€ `options` ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜์—ฌ ์˜ต์…˜์„ ๋™์ ์œผ๋กœ ํ‘œ์‹œ

Co-Authored-By: badahertz52 <[email protected]>
Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: Fe <[email protected]>

* chore: svg ์•„์ด์ฝ˜ ํฌ๊ธฐ ์ˆ˜์ •

Co-Authored-By: badahertz52 <[email protected]>
Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: Fe <[email protected]>

* design: Topbar UI ์ˆ˜์ •

Co-Authored-By: badahertz52 <[email protected]>
Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: Fe <[email protected]>

* design: ๋ฒ„ํŠผ, ๊ฒ€์ƒ‰์ฐฝ UI ์ˆ˜์ • ํ›„ export

Co-Authored-By: badahertz52 <[email protected]>
Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: Fe <[email protected]>

* feat: ReviewPreviewCard ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„

- ๋ฆฌ๋ทฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์นด๋“œ ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„
- ๋ฆฌ๋ทฐ์–ด ๊ทธ๋ฃน ์ด๋ฆ„, ์ƒ์„ฑ์ผ, ๋ฆฌ๋ทฐ ๋‚ด์šฉ ๋ฏธ๋ฆฌ๋ณด๊ธฐ, ํ‚ค์›Œ๋“œ, ๊ณต๊ฐœ ์—ฌ๋ถ€๋ฅผ ํ‘œ์‹œ

Co-Authored-By: badahertz52 <[email protected]>
Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: Fe <[email protected]>

* chore: ReviewPreview ์ธํ„ฐํŽ˜์ด์Šค ์ถ”๊ฐ€

- ๋ฆฌ๋ทฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ์ •์˜ํ•˜๋Š” `ReviewPreview` ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

Co-Authored-By: badahertz52 <[email protected]>
Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: Fe <[email protected]>

* feat: SearchSection ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„

- ๊ฒ€์ƒ‰ ์ž…๋ ฅ์ฐฝ, ๊ฒ€์ƒ‰ ๋ฒ„ํŠผ, ๋“œ๋กญ๋‹ค์šด์„ ํฌํ•จํ•˜์—ฌ ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„

Co-Authored-By: badahertz52 <[email protected]>
Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: Fe <[email protected]>

* feat: ReviewPreviewListPage ๊ตฌํ˜„ ๋ฐ ๋ชจ์˜ ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€

- `ReviewPreviewListPage` ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„
  - `SearchSection`์„ ํฌํ•จํ•˜์—ฌ ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„
  - `ReviewPreviewCard`๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฆฌ๋ทฐ ๋ชฉ๋ก์„ ํ‘œ์‹œ
- ๋ชจ์˜ ๋ฐ์ดํ„ฐ(`mockReviewPreviews`) ์ถ”๊ฐ€

Co-Authored-By: badahertz52 <[email protected]>
Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: Fe <[email protected]>

* chore: import ์ค‘๋ณต ๋ฐ ์ˆœ์„œ ์ •๋ฆฌ, ReviewPreviewListPage ๋ผ์šฐํŠธ ์ถ”๊ฐ€

Co-Authored-By: badahertz52 <[email protected]>
Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: Fe <[email protected]>

* chore: ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์š”์†Œ๋ฅผ ๊ฐ์‹ธ๊ธฐ ๋•Œ๋ฌธ์— Container๋กœ ๋ณ€๊ฒฝ

Co-Authored-By: badahertz52 <[email protected]>
Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: Fe <[email protected]>

* feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ๋ฐ์ดํ„ฐ๋ฅผ ์„œ๋ฒ„์—์„œ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•ด getReviewListApi ํ•จ์ˆ˜ ์ถ”๊ฐ€

Co-Authored-By: badahertz52 <[email protected]>
Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: Fe <[email protected]>

* refactor: ์ƒ์„ธ ๋ฆฌ๋ทฐ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ api ์—”๋“œํฌ์ธํŠธ ์ˆ˜์ •

Co-Authored-By: badahertz52 <[email protected]>
Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: Fe <[email protected]>

* refactor: ์ƒ์„ธ ๋ฆฌ๋ทฐ ํŽ˜์ด์ง€ API ์—ฐ๋™ ๋ถ€๋ถ„ ์ˆ˜์ •

Co-Authored-By: badahertz52 <[email protected]>
Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: Fe <[email protected]>

---------

Co-authored-by: badahertz52 <[email protected]>
Co-authored-by: ImxYJL <[email protected]>
Co-authored-by: Fe <[email protected]>

* [BE] feat: ๋ฆฌ๋ทฐ ์ž‘์„ฑ API ๊ตฌํ˜„ (#102)

* refactor: ๋ฆฌ๋ทฐ ์š”์ฒญ dto ์ˆ˜์ •

* refactor: ๋ฆฌ๋ทฐ ์ฝ˜ํ…์ธ  ์ƒ์„ฑ ์‹œ, ๋ฆฌ๋ทฐ์— ์ž์‹ ์„ ์ถ”๊ฐ€ํ•˜๋„๋ก ๋ณ€๊ฒฝ

* feat: QuestionRepository ์ถ”๊ฐ€

* feat: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ๊ธฐ๋Šฅ ์ถ”๊ฐ€

* test: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

* refactor: ReviewGroup ์ƒ์„ฑ ์‹œ, GithubIdReviewerGroup๋„ ๊ฐ™์ด ์ €์žฅ๋˜๋„๋ก ๋ณ€๊ฒฝ

* refactor: GithubId equals ๋ฐ hashcode ์žฌ์ •์˜

* refactor: review ์ƒ์„ฑ ์‹œ, reviewGroup์ด null์ด ์•„๋‹ˆ๋„๋ก ๋ณ€๊ฒฝ

* refactor: EqualsAndHashCode์— id ๋ช…์‹œ

* refactor: reviewee๋ฅผ reviewerGroup ํ†ตํ•ด์„œ ๋ฐ›์•„์˜ค๋„๋ก ๋ณ€๊ฒฝ

* refactor: ํŒŒ๋ผ๋ฏธํ„ฐ long ํƒ€์ž…์œผ๋กœ ๋ณ€๊ฒฝ

* test: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ณ€์ˆ˜ ์ œ๊ฑฐ

* test: ํŒŒ๋ผ๋ฏธํ„ฐ๋ณ„๋กœ ๊ฐœํ–‰ํ•˜๋„๋ก ๋ณ€๊ฒฝ

* refactor: ReviewerGroupGithubIds์˜ reviewerGithubIds๋ฅผ CascadeType.PERSIST๋กœ ๋ณ€๊ฒฝ

* chore: ๋‹ค๋ฅธ ์ž‘์—…์—์„œ ์ง„ํ–‰๋  ์‚ฌํ•ญ์œผ๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํ…Œ์ŠคํŠธ ์‚ญ์ œ

* [FE] Github Actions๋กœ CI ๊ตฌ์ถ• (#96)

* ci: CI๋ฅผ ์œ„ํ•œ yml ํŒŒ์ผ ์ž‘์„ฑ

* ci: yarn.lock ๊ฒฝ๋กœ ์ถ”๊ฐ€

* ci: working-directory ์ถ”๊ฐ€

* cI: ๋™์ž‘ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด push ๋ธŒ๋žœ์น˜ ๊ฒฝ๋กœ ์กฐ๊ฑด์—์„œ frontend ์ž„์‹œ ์ œ๊ฑฐ

* ci: ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด ํ˜„์žฌ ๋ธŒ๋žœ์น˜๋„ ์กฐ๊ฑด์— ์ถ”๊ฐ€

* ci: package์— test ๋ช…๋ น์–ด ์ถ”๊ฐ€

* ci: yarn.lock ํŒŒ์ผ ์—…๋ฐ์ดํŠธ

* ci: ํ…Œ์ŠคํŠธ ํŒŒ์ผ ํ˜•์‹ ์ˆ˜์ •

* chore: ํ•„์š”์—†๋Š” ํŒŒ์ผ ์‚ญ์ œ

* chore: svg ํŒŒ์ผ์„ ๋Œ€๋ฌธ์ž๋กœ importํ•œ ๊ฒƒ๋“ค ์†Œ๋ฌธ์ž๋กœ ์ˆ˜์ •

* ci: ์›นํŒฉ env ์„ค์ • ์—…๋ฐ์ดํŠธ

* ci: process.env ์‚ฌ์šฉ์„ ์œ„ํ•œ ํƒ€์ž… ์„ค์ •

* ci: env ์›นํŒฉ ์„ค์ • ๊ฒฝ๋กœ๋ฅผ ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋กœ ๋ณ€๊ฒฝ

* ci: env ์›นํŒฉ ์„ค์ • ๊ฒฝ๋กœ ์ˆ˜์ •

* ci: env ์ ˆ๋Œ€๊ฒฝ๋กœ ์ˆ˜์ •

* ci: ์ ˆ๋Œ€๊ฒฝ๋กœ ์ˆ˜์ • 2

* ci: ์ฝ๊ธฐ ๊ถŒํ•œ์„ ๋ช…์‹œ์ ์œผ๋กœ ์ฃผ๊ณ  ํ…Œ์ŠคํŠธ

* ci: dist ํŒŒ์ผ ํ…Œ์ŠคํŠธ

* ci: CI ํ™˜๊ฒฝ์—์„œ๋„ env ํŒŒ์ผ ์ƒ์„ฑ

* ci: ๋ฐฐํฌ ์ •์ƒ ๋™์ž‘ ํ™•์ธ์„ ์œ„ํ•œ github pages ์ž„์‹œ ๋ฐฐํฌ ์„ค์ •

* ci: ์ž„์‹œ ๋ฐฐํฌ ์ฝ”๋“œ ์‚ญ์ œ

* ci: develop ๋ธŒ๋žœ์น˜๋กœ frontend ์ดํ•˜ ๊ฒฝ๋กœ์—์„œ PR์ด ์˜ฌ๋ผ์˜ฌ ๋•Œ CI๊ฐ€ ์‹คํ–‰๋˜๋„๋ก ์ˆ˜์ •

* ci: node ์„ค์น˜ ์—๋Ÿฌ ํ•ด๊ฒฐ

* [BE] feat: ๋ฆฌ๋ทฐ์— ํ•„์š”ํ•œ ์ •๋ณด ์กฐํšŒ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ (#103)

* test: QuestionTestFixture ์ƒ์„ฑ

* feat: ๋ชจ๋“  ๋ฆฌ๋ทฐ ๋ฌธํ•ญ์„ ์กฐํšŒํ•˜๋Š” ๊ธฐ๋Šฅ ๊ตฌํ˜„

* feat: ๋ชจ๋“  ํ‚ค์›Œ๋“œ๋ฅผ ์กฐํšŒํ•˜๋Š” ๊ธฐ๋Šฅ ๊ตฌํ˜„

* test: ReviewerGroupFixture ์ƒ์„ฑ

* feat: ๋ฆฌ๋ทฐ ์ƒ์„ฑ ์‹œ ํ•„์š”ํ•œ ๋ฆฌ๋ทฐ์–ด ๊ทธ๋ฃน ์ •๋ณด๋ฅผ ์กฐํšŒํ•˜๋Š” ๊ธฐ๋Šฅ ๊ตฌํ˜„

* feat: ๋ฆฌ๋ทฐ ์ƒ์„ฑ ์‹œ ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์กฐํšŒํ•˜๋Š” ๊ธฐ๋Šฅ ๊ตฌํ˜„

* refactor: @ServiceTest ์ ์šฉ

* refactor: swagger ์ ์šฉ

* refactor: ํ•„๋“œ๋ช… ๋ณ€๊ฒฝ

* style: ๊ฐœํ–‰ ์ถ”๊ฐ€

* refactor: ๋‚ ์งœ ํ˜•์‹ ๋ณ€๊ฒฝ

* test: import๋ฌธ ์ œ๊ฑฐ

* refactor: ReviewCreationResponse ํŒจํ‚ค์ง€ ๋ณ€๊ฒฝ

* refactor: readOnly ํŠธ๋žœ์žญ์…˜ ์ ์šฉ

* fix: ๋ฆฌ๋ทฐ์–ด ์ค‘๋ณต ๊ฒ€์ฆ ์ž„์‹œ ์ œ๊ฑฐ

---------

Co-authored-by: donghoony <[email protected]>

* [FE] ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํŽ˜์ด์ง€์—์„œ MSW๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋ฒ„ mocking (#111)

* chore: ์ค‘๋ณต๋œ ์ธํ„ฐํŽ˜์ด์Šค ์ œ๊ฑฐ

* feat: MSW ํ•ธ๋“ค๋Ÿฌ ๋ฐ mock data ์ถ”๊ฐ€

* chore: ๋ฆฌ๋ทฐ ์“ฐ๊ธฐ ํŽ˜์ด์ง€ ๋ฐ์ดํ„ฐ endpoint ์ˆ˜์ •

* feat: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํŽ˜์ด์ง€์— msw๋ฅผ ์ ์šฉํ•˜์—ฌ ์„œ๋ฒ„ mocking

* merge

* [FE]  ๊ณตํ†ต ์ปดํฌ๋„ŒํŠธ์ธ ๋ชจ๋‹ฌ์„ ๋งŒ๋“ ๋‹ค. (#110)

* fix: stylelint๋ฅผ ํ†ตํ•œ css ์†์„ฑ ์ •๋ ฌ ๊ธฐ๋Šฅ ์˜ค๋ฅ˜ ์ˆ˜์ •

- stylelint ๋ฒ„์ „16๊ณผ ์ถฉ๋Œ๋˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ ์‚ญ์ œ : stylelint-config-prettier, stylelint-prettier
- css ์ •๋ ฌ์— ํ•„์š”ํ•˜์ง€ ์•Š์€ ํ”Œ๋Ÿฌ๊ทธ์ธ ์‚ญ์ œ : stylelint-config-standard, stylelint-config-styled-componented, stylelint-webpack-plugin
- ์ถ”๊ฐ€๋กœ ์„ค์น˜ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ: postcss-syntax, @stylelint/postcss-css-in-js
- stylelint ์ ์šฉ script ์ถ”๊ฐ€
- .stylelintrc.json ์ˆ˜์ • : css ๊ด€๋ จ rule ์„ค์ •

* refactor: stylelint ์ ์šฉ์— ๋”ฐ๋ฅธ css ์†์„ฑ ์ •๋ ฌ

* fix : ์ ˆ๋Œ€ ๊ฒฝ๋กœ ์‚ฌ์šฉ ์‹œ ์˜ค๋ฅ˜ ์ˆ˜์ •

์˜ค๋ฅ˜ : eslintimport/no-unresolved

* chore: eslintrc.cjs ์—์„œ ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ ์‚ญ์ œ

 node ํ™˜๊ฒฝ setting ์‚ญ์ œ

* style: eslint ์ ์šฉ์— ๋”ฐ๋ฅธ ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€ import ์ˆœ์„œ ์ •๋ฆฌ

* refactor: formatDate๋ฅผ utils/date ํŒŒ์ผ๋กœ ์ด๋™

* design: theme์— colors,, fontSize ๋ณ€๊ฒฝ ๋ฐ borderRadius ์ถ”๊ฐ€

* feat: MultilineTextViewer ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ

- ๊ฐœํ–‰์ด ํฌํ•จ๋œ string์— ๊ฐœํ–‰์„ ์ ์šฉํ•ด์„œ ๋ณด์—ฌ์ฃผ๋Š” ์ปดํฌ๋„ŒํŠธ

* feat: ๊นƒํ—ˆ๋ธŒ ์ €์žฅ์†Œ ์ด๋ฏธ์ง€ ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ

* feat: ๋ฆฌ๋ทฐ์™€ ๊ด€๋ จ๋œ ๋‚ ์งœ UI ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ

* featr: LockButton ์‚ญ์ œ LockToggle ์ถ”๊ฐ€

* refactor: ํ”ผ๊ทธ๋งˆ ๋””์ž์ธ ๋ณ€๊ฒฝ์— ๋”ฐ๋ฅธ ReviewDescription ๋ณ€๊ฒฝ

* feat: ReviewComment ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ

* refactor: ReviewViewSection -> ReviewSection ์œผ๋กœ ๋ณ€๊ฒฝ ๋ฐ ๋ฆฌํŒฉํ† ๋ง

- ๋ถˆํ•„์š”ํ•œ  ์ปดํฌ๋„ŒํŠธ ์‚ญ์ œ : RevieAnswer , ReviewQuestion

* refactor: DetailedReviewPage ๋ฆฌํŒฉํ† ๋ง

- ๋ชฉ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ
-  ์ถ”๊ฐ€ ๋ฐ ๋ณ€๊ฒฝ๋œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•ด ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€ ์ปดํฌ๋„ŒํŠธ(DetailedReviewPage) ๋ฆฌํŒฉํ† ๋ง
- DetailedReviewPage ํด๋”์˜ styles.ts ์‚ญ์ œ

* refactor: review์— ๋Œ€ํ•œ ํƒ€์ž… ๋ณ€๊ฒฝ

* design : ReviewDate์˜ ํด๋ก  ์Šคํƒ€์ผ ์ ์šฉ

* feat: KeywordSection ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ

- ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€ ํ‚ค์›Œ๋“œ ๋ถ€๋ถ„ ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ

* feat: ReviewSectionHeader ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ ๋ฐ ์ ์šฉ

- ๋ฆฌ๋ทฐ ์ƒ์„ธ๋ณด๊ธฐ์—์„œ ๋ฐ˜๋ณต๋˜๋Š” ์งˆ๋ฌธ,ํ‚ค์›Œ๋“œ ํ—ค๋”๋ถ€๋ถ„์„ ์ปดํฌ๋„ŒํŠธ๋กœ ๋ถ„๋ฆฌ

* design : ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€์— width ๋ณ€๊ฒฝ

* refactor: DetailedReview์˜ ๋ชฉ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ๋ฐ ๋ฆฌํŒฉํ† ๋ง

- ํƒ€์ž… ๋ณ€๊ฒฝ์— ๋”ฐ๋ฅธ ๋ชฉ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ
- KeywordSection ์ ์šฉ

* design : formWidth๋ฅผ theme์— ์ถ”๊ฐ€ ๋ฐ ๋ฆฌ๋ทฐ ์ž‘์„ฑ/๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€์— ์ ์šฉ

* fix: Layout์—์„œ ๊ฐ€๋กœ ์Šคํฌ๋กค ์ƒ๊ธฐ๋Š” ์˜ค๋ฅ˜ ์ˆ˜์ •

- 100vw๋Š” ์Šคํฌ๋กค์„ ํฌํ•จํ•œ ๋ทฐํฌํŠธ ๋„ˆ๋น„๋ผ์„œ 100%์œผ๋กœ ์ˆ˜์ •

* feat: ๋ฆฌ๋ทฐ ์ƒํŽ˜์ด์ง€ router์— ๋ผ์šฐํ„ฐ ํŒŒ๋ผ๋ฏธํ„ฐ ์ ์šฉ ๋ฐ ๊ด€๋ จ ์„ค์ • ๋ณ€๊ฒฝ

- ๋ฐ๋ชจ๋ฐ์ด๋ฅผ ์œ„ํ•ด ํ˜„์žฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์žˆ๋Š” ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€ id๋ฅผ sidebar์˜ ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€ ๋ฉ”๋‰ด link์— ์ ์šฉ
- ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€(DetailedReviewPage)์˜ api ํ•ธ๋“ค๋Ÿฌ ์ˆ˜์ •

* docs: ๋ณ€์ˆ˜๋ช… ๋ณ€๊ฒฝ (isLock -> isPublic)

* refactor: ๊นƒํ—™ ์ €์žฅ์†Œ ๋กœ๊ณ  ์ฃผ์†Œ ๋ณ€์ˆ˜๋ช… ๋ณ€๊ฒฝ

- projectImgSrc -> thumbnailUrl

* ci: msw ๊ด€๋ จ ํŒจํ‚ค์ง€ ์„ค์น˜

* ci: msw ๊ด€๋ จ ์„ค์ •ํŒŒ์ผ ์ถ”๊ฐ€

- ๋ธŒ๋ผ์šฐ์ € ํ™˜๊ฒฝ, node ํ™˜๊ฒฝ์—์„œ msw๋กœ ๋ชฉ์„œ๋ฒ„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ด€๋ จ ํŒŒ์ผ ์ถ”๊ฐ€

* feat: mock ํ•ธ๋“ค๋Ÿฌ ์ถ”๊ฐ€ ๋ฐ ์ƒ์„ธ ๋ฆฌ๋ทฐ ํŽ˜์ด์ง€ ๋ชฉ ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€

* feat:  root์—์„œ ๋ชฉ์„œ๋ฒ„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋กํ•จ

* refactor: endpoint ์ˆ˜์ •

- env ์—์„œ ์„œ๋ฒ„ ์ฃผ์†Œ ๋์— ์Šฌ๋ž˜์‹œ ๋„ฃ๋Š” ๊ฒƒ์œผ๋กœ ํ†ต์ผ

* feat: ์ƒ์„ธ ๋ฆฌ๋ทฐ ํŽ˜์ด์ง€(detailedReviewPage)์— ๋ชฉ์„œ๋ฒ„ ์—ฐ๊ฒฐ ๋ฐ ๊ด€๋ จ ์ฝ”๋“œ ์ˆ˜์ •

- ์ƒํƒœ๋ช… ๋ณ€๊ฒฝ: detailReview -> detailedReview
- detailedReview ํƒ€์ž…์— null ์ถ”๊ฐ€ ๋ฐ ๊ทธ์— ๋”ฐ๋ฅธ ์˜ค๋ฅ˜ ํ•ธ๋“ค๋ง ์ถ”๊ฐ€
- deadline์— string ํƒ€์ž…์œผ๋กœ response๋กœ ์ „๋‹ฌ๋˜์–ด์„œ new Date๋กœ ๊ฐ์‹ธ์„œ props๋กœ ์ „๋‹ฌ

* docs: indexhtml์˜ title ๋ณ€๊ฒฝ

* style: apis/review.ts ์˜ import ๊ด€๋ จ eslint rule ์ ์šฉ์— ๋”ฐ๋ฅธ ์ˆ˜์ •

* fix: ts์—์„œ process ์ฝ์ง€ ๋ชปํ•˜๋Š” ์˜ค๋ฅ˜ ์ˆ˜์ •

* fix: webpack dev server script ๋ณต์›

* feat: ModalPortal ์…์„ฑ

* feat: SideModal ์ปดํฌ๋„ŒํŠธ, useSide  ์…์„ฑ ๋ฐ Sidebar์— ์ ์šฉ

* feat: ModalBackground ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ ๋ฐ ์ ์šฉ

* fix: ๋ชจ๋‹ฌ ์—ด๋ฆด ๋•Œ ์Šคํฌ๋กค๋ฐ” ๋ง‰๋Š” ๊ธฐ๋Šฅ ์˜ค๋ฅ˜ ์ˆ˜์ •

* design : ModalPortal ์‚ฌ์ด์ฆˆ ๋‹จ์œ„ ๋ณ€๊ฒฝ (% -> vw, vh)

* feat: Button ์ปดํฌ๋„ŒํŠธ๊ฐ€ button ์†์„ฑ์„ props๋กœ ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก ์ˆ˜์ •

* feat: ConfirmModal ์ƒ์„ฑ

* refactor: index.tsx์—์„œ ๋ชจ๋‹ฌ์„ ๊บผ๋‚ผ ์ˆ˜ ์žˆ๋„๋ก ๋ฆฌํŒฉํ† ๋ง

* refactor: PropsWithChildren ์ˆ˜์ •

- PropsWithChildren๋ฅผ import ํ•˜์ง€ ์•Š๊ณ  React์—์„œ ๋ฐ”๋กœ ์“ธ ์ˆ˜ ์žˆ๋„๋ก React.PropsWithChildren๋กœ  ์ˆ˜์ •

* [FE] msw๊ด€๋ จ env ์˜ค๋ฅ˜ ํ•ด๊ฒฐ  (#114)

* chore: fe/feat/105-review-writing-msw  ์˜  endpoint ๊ด€๋ จ ๋ณ€๊ฒฝ์‚ฌํ•ญ ๋ฐ˜์˜

* fix: NODE_ENV ๊ด€๋ จ ์˜ค๋ฅ˜ ์ˆ˜์ •

- ์˜ค๋ฅ˜ : env ํŒŒ์ผ์— NODE_ENV๊ฐ€ ์—†์Œ์—๋„ ์ด๋ฅผ ์ธ์‹ํ•˜๋Š” ์˜ค๋ฅ˜ ๋ฐœ์ƒ
- ์›์ธ: ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ NODE_ENV๋ฅผ ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๋‹ค๊ณ  ํ•จ
- ํ•ด๊ฒฐ: NODE_ENV๋ฅผ ์‚ญ์ œํ•˜๊ณ  MSW๋ฅผ ์‚ฌ์šฉ

* [BE] feat: ๋‚ด๊ฐ€ ๋ฐ›์€ ๋ฆฌ๋ทฐ ๋ณด๊ธฐ ๊ธฐ๋Šฅ ๊ตฌํ˜„ (#109)

* refactor: contains ์ž‘๋™์„ ์œ„ํ•œ EqualsAndHashcode ์ถ”๊ฐ€

* fix: lazyInitialization ํ•ด๊ฒฐ

* feat: ์งˆ๋ฌธ ๋ ˆํฌ์ง€ํ† ๋ฆฌ ์ƒ์„ฑ

* feat: ๋‚ด๊ฐ€ ๋ฐ›์€ ๋ฆฌ๋ทฐ ์‘๋‹ต ์ƒ์„ฑ

* refactor: ๋ฆฌ๋ทฐ ํ•ญ๋ชฉ๊ณผ ์งˆ๋ฌธ์˜ ์—ฐ๊ด€๊ด€๊ณ„ ๋ณ€๊ฒฝ ๋ฐ ๋‹ต๋ณ€ ์ตœ๋Œ€ ๊ธ€์ž์ˆ˜ DB์— ๋ฐ˜์˜

* refactor: ๋ฆฌ๋ทฐ์— ๋ฆฌ๋ทฐ๊ทธ๋ฃน ์ดˆ๊ธฐํ™” ๋ถ€๋ถ„ ์ถ”๊ฐ€

* feat: ๋‚ด๊ฐ€ ๋ฐ›์€ ๋ฆฌ๋ทฐ ์กฐํšŒ ๊ธฐ๋Šฅ ๊ตฌํ˜„

* feat: ๋ฐ›์€ ๋ฆฌ๋ทฐ๊ฐ€ ์—†์„ ๋•Œ์˜ ์‘๋‹ต ์ถ”๊ฐ€

* refactor: dto ์„ค๋ช… ์ถ”๊ฐ€

* refactor: dto ์„ค๋ช… ์ˆ˜์ •

* refactor: ์ธ์ž ํ˜•์‹ ์ˆ˜์ •, ๊ฐœํ–‰ ์ˆ˜์ •

* refactor: transactional ์–ด๋…ธํ…Œ์ด์…˜ ์ถ”๊ฐ€

* refactor: ๋‚ด๊ฐ€ ๋ฐ›์€ ๋ฆฌ๋ทฐ ์กฐํšŒํ•  ๋•ŒPage๊ฐ์ฒด ๋ง๊ณ  List๋กœ ๋ฐ›์•„์˜ค๋„๋ก ์ˆ˜์ •

* refactor: ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๋งŒ๋“œ๋Š” ๊ธฐ๋Šฅ ๋„๋ฉ”์ธ ์•ˆ์œผ๋กœ ์ด๋™

* test: ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ๊ฐœ์„ 

- ๋ณ€์ˆ˜๋ช… ์ˆ˜์ •, save ์—ฌ๋Ÿฌ๊ฐœ ๋Œ€์‹  saveAll ์‚ฌ์šฉ ๋“ฑ

* refactor: ๋งˆ์ง€๋ง‰์œผ๋กœ ๋ณธ ๋ฆฌ๋ทฐID๊ฐ€ ์—†๋Š” ๋กœ์ง์— ๋Œ€ํ•ด ์ˆ˜์ •

- lastViewedReviewId๋ฅผ ์ž…๋ ฅํ•˜์ง€ ์•Š์œผ๋ฉด 999๊ฐ™์ด ์ด์ƒํ•˜๊ฒŒ ํฐ ์ˆ˜๋ฅผ ๋„ฃ์–ด์ฃผ๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ, ๊ฐ€์žฅ ํฐ ๊ฐ’์„ ๋„ฃ์–ด์ฃผ๋„๋ก ์ˆ˜์ •

* docs: ์Šค์›จ๊ฑฐ ๋ฐ์ฝ”๋ ˆ์ด์…˜ ์ ์šฉ

* refactor: lastReviewId๊ฐ€ null ์ด์–ด๋„ ๊ฐ€์žฅ ์ตœ์‹  ๋ฆฌ๋ทฐ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋„๋ก ์ˆ˜์ •

* refactor: eqaulsAndHashCode ์žฌ์ •์˜

* refactor: eqaulsAndHashCode ์žฌ์žฌ์ •์˜

* refactor: API Docs ๋ฐ˜์˜

---------

Co-authored-by: donghoony <[email protected]>

* fix: ์ž˜๋ชป ์ •์˜๋œ endpoint ์ˆ˜์ • (#118)

* [FE] ๋จธ์ง€๋กœ ์ธํ•ด ์‚ฌ๋ผ์ง„ ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ ๋ณต๊ตฌ ๋ฐ ๋ฐ์ดํ„ฐ ํƒ€์ž… ๋ณ€๊ฒฝ (#121)

* refactor: ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€ ๋ฐ์ดํ„ฐ ํƒ€์ž… ๋ณ€๊ฒฝ ๋ฐ Keyword ํƒ€์ž… ๋ณต๊ตฌ

* fix: ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€์˜ path ๋ณต๊ตฌ

* fix: ์‚ฌ์ด๋“œ๋ฐ”์˜ ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€ ๊ฒฝ๋กœ ๋ณต๊ตฌ

* refactor: ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€ ๋ฐ์ดํ„ฐ ํƒ€์ž… ๋ณ€๊ฒฝ์— ๋”ฐ๋ฅธ ๋ชฉ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ

* fix: DetailedReviewPage ๋ณต๊ตฌ ๋ฐ ๋ฐ์ดํ„ฐ ํƒ€์ž… ๋ณ€๊ฒฝ์— ๋”ฐ๋ฅธ ์ˆ˜์ •

* [BE] ๋”๋ฏธ ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€, local ํ”„๋กœํŒŒ์ผ ๊ด€๋ฆฌ (#123)

* refactor: Unauthorized ์˜ˆ์™ธ ์ฒ˜๋ฆฌ

* chore: ๋”๋ฏธ ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€ ๋ฐ Profile ์ฒ˜๋ฆฌ

* chore: ํ…Œ์ŠคํŠธ yml ์ƒ์„ฑ

* fix: Long notblank -> notnull (#126)

* [FE] ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํŽ˜์ด์ง€์—์„œ msw๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจํ‚น (#124)

* feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํŽ˜์ด์ง€์—์„œ msw๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจํ‚น

Co-Authored-By: badahertz52 <[email protected]>
Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: Fe <[email protected]>

* chore: ์—”๋“œํฌ์ธํŠธ baseurl์— '/' ์ถ”๊ฐ€

Co-Authored-By: badahertz52 <[email protected]>
Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: Fe <[email protected]>

---------

Co-authored-by: badahertz52 <[email protected]>
Co-authored-by: ImxYJL <[email protected]>
Co-authored-by: Fe <[email protected]>

* fix: ๋ฆฌ๋ทฐ ๋ชฉ๋ก DTO ํ•„๋“œ ์ˆ˜์ • (#129)

* [FE] msw ๋ชจํ‚น์„ ์œ„ํ•œ ๋ฆฌ๋ทฐ ๋ฐ์ดํ„ฐ ํ•˜๋“œ์ฝ”๋”ฉ (#130)

* refactor: msw ๋ชจํ‚น์„ ์œ„ํ•œ ๋ฆฌ๋ทฐ ๋ฐ์ดํ„ฐ ํ•˜๋“œ์ฝ”๋”ฉ

Co-Authored-By: ImxYJL <[email protected]>

* refactor: 2์ฐจ ๋ฐ๋ชจ๋ฐ์ด๋ฅผ ์œ„ํ•œ ๋ฉค๋ฒ„ ์•„์ด๋”” ์ƒ์ˆ˜ํ™”

Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: badahertz52 <[email protected]>
Co-Authored-By: Fe <[email protected]>

* chore: ๋ถˆํ•„์š”ํ•œ ์ฝ˜์†” ๋กœ๊ทธ ์ œ๊ฑฐ

Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: badahertz52 <[email protected]>
Co-Authored-By: Fe <[email protected]>

---------

Co-authored-by: ImxYJL <[email protected]>
Co-authored-by: badahertz52 <[email protected]>
Co-authored-by: Fe <[email protected]>

* [FE] endPoint ์˜ค๋ฅ˜์™€ ๋ฆฌ๋ทฐ ๊ทธ๋ฃน ์•„์ด๋”” ์ˆ˜์ • (#132)

* fix: endpoint ์˜ค๋ฅ˜ ์ˆ˜์ •

* fix: ๋ฆฌ๋ทฐ ์ƒ์„ฑ์„ ์œ„ํ•œ ๋ฐ์ดํ„ฐ ๋ฐ›์„ ๋•Œ์˜ ๋ฆฌ๋ทฐ ๊ทธ๋ฃน ์•„์ด๋””๋ฅผ 1๋กœ ์ˆ˜์ •

* [BE] fix: ๋ฆฌ๋ทฐ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ ์ƒ์„ฑ ๊ธฐ๋Šฅ ์ˆ˜์ • (#134)

* fix: src/index.tsx์—์„œ enableMocking ์ œ๊ฑฐ (#136)

* [FE] Children ์†์„ฑ์ด ํ•„์ˆ˜์ธ ํƒ€์ž… ์ œ์ž‘ (#147)

* feat: children ์†์„ฑ์ด ํ•„์ˆ˜์ธ EssentialPropsWithChildren ํƒ€์ž… ์ƒ์„ฑ

* chore: types ํด๋”์˜ index ํŒŒ์ผ์— ๋ˆ„๋ฝ๋๋˜ export๋“ค ์ถ”๊ฐ€ ๋ฐ ๊ทธ์— ๋”ฐ๋ฅธ types import๋ฌธ ๊ฒฝ๋กœ ์ˆ˜์ •

* [FE] ์‚ฌ์ด๋“œ๋ฐ” ๋ฐ ๋ชจ๋‹ฌ ์‚ฌ์šฉ์„ฑ ๊ฐœ์„  (#139)

* refactor: ์‚ฌ์ด๋“œ๋ฐ”๋ฅผ ๋‹ซ๋Š” ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ œ๊ฑฐ

* refactor: ์‚ฌ์ด๋“œ๋ฐ”๊ฐ€ ๋” ๋นจ๋ฆฌ ์—ด๋ฆฌ๋„๋ก ์ˆ˜์ •

* feat: ๋ชจ๋‹ฌ์˜ ๋ฐฐ๊ฒฝ ํด๋ฆญ ๋ฐ esc ํ‚ค๋ฅผ ๋ˆŒ๋ €์„ ๋•Œ ๋ชจ๋‹ฌ์ด ๋‹ซํžˆ๋Š” ๊ธฐ๋Šฅ ์ถ”๊ฐ€

* chore: hooks index์— useModalClose ์ถ”๊ฐ€

* feat: ์‚ฌ์ด๋“œ๋ฐ” ๋ฆฌ์ŠคํŠธ ์•„์ดํ…œ์„ ํด๋ฆญํ–ˆ์„ ๋•Œ ์‚ฌ์ด๋“œ๋ฐ”๊ฐ€ ๋‹ซํžˆ๋Š” ๊ธฐ๋Šฅ ์ถ”๊ฐ€

* refactor: useModalClose ํ›…์„ ๋ชจ๋“  ๋ชจ๋‹ฌ์˜ ๊ณตํ†ต ์ตœ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ์ธ ModalBackground์—์„œ ์ฒ˜๋ฆฌํ•˜๋„๋ก ์ˆ˜์ •

* refactor: ModalBackground๋ฅผ ํด๋ฆญํ–ˆ์„ ๋•Œ ๋ชจ๋‹ฌ์ด ๋‹ซํžˆ๊ฒŒ ํ•˜๋Š” ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ๋ฅผ document ๋Œ€์‹  Background์— ์ถ”๊ฐ€

* fix: esc๋ฅผ ์‚ฌ์šฉํ•ด ๋ชจ๋‹ฌ์„ ๋‹ซ์•˜์„ ๋•Œ ํ–„๋ฒ„๊ฑฐ ๋ฒ„ํŠผ์— ํฌ์ปค์Šค๊ฐ€ ์ƒ๊ธฐ๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ ๋ฐ ๋ณ€์ˆ˜๋ช… ๋Œ€์†Œ๋ฌธ์ž ์ˆ˜์ •

* refactor: useEffect ๋‚ด๋ถ€ ํ•จ์ˆ˜๋“ค์„ ํ›… ์™ธ๋ถ€๋กœ ์ด๋™ ๋ฐ ์ฃผ์„ ์ถ”๊ฐ€

* [FE] ์กด์žฌํ•˜์ง€ ์•Š๋Š” element์— ๋Œ€ํ•œ ์—๋Ÿฌ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ์œ ํ‹ธ๋ฆฌํ‹ฐ ํ•จ์ˆ˜ ์ œ์ž‘ (#150)

* feat: ์กด์žฌํ•˜์ง€ ์•Š๋Š” element์— ๋Œ€ํ•œ ์—๋Ÿฌ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ํ›… ์ œ์ž‘

* chore: hooks ํด๋” index์— useExistentElement ์ถ”๊ฐ€

* refactor: useExistentElement ํ›…์„ ๋”์šฑ ๋ฒ”์šฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ˆ˜์ •

* refactor: ์กด์žฌํ•˜์ง€ ์•Š๋Š” ์š”์†Œ๋ฅผ ํŒ๋ณ„ํ•˜๋Š” ๋™์ž‘์„ ์ปค์Šคํ…€ ํ›… ๋Œ€์‹  ์œ ํ‹ธ๋ฆฌํ‹ฐ ํ•จ์ˆ˜๋กœ ์ œ์ž‘

* chore: ๊ธฐ์กด์˜ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ์š”์†Œ๋ฅผ ํƒ์ง€ํ•˜๋Š” ์ปค์Šคํ…€ ํ›… ์‚ญ์ œ

* [FE] HTTP ์š”์ฒญ ์˜ค๋ฅ˜ ์‹œ status code๋ณ„ ์˜ค๋ฅ˜ ์ƒํ™ฉ์„ ๋Œ€์‘ํ•˜๋Š” ํ•จ์ˆ˜ ์ƒ์„ฑ (#151)

* feat: api ์—๋Ÿฌ ์‹œ ํ‘œ์‹œํ•œ ๋ฉ”์„ธ์ง€ ์ƒ์„ฑ ํ•จ์ˆ˜ ์ถ”๊ฐ€

* refactor: api/review.ts์— api ์˜ค๋ฅ˜ ์‹œ ๋ฉ”์„ธ์ง€๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” createApiErrorMessage ํ•จ์ˆ˜ ์ ์šฉ

* docs: http ์š”์ฒญ ์‹คํŒจ ๋ฉ”์„ธ์ง€ ์ˆ˜์ •

* fix: ์˜คํƒ€ ์ˆ˜์ •

* [FE] ํŽ˜์ด์ง€ ์ƒ๋‹จ ์ด๋™ ๋ฒ„ํŠผ ๊ตฌํ˜„ (#153)

* feat: top button ๋กœ์ง ํ›…์œผ๋กœ ๊ตฌํ˜„

* design: top button UI ๊ตฌํ˜„

* chore: ๊ฐ ํŽ˜์ด์ง€๋งˆ๋‹ค top button์ด ๋ณด์—ฌ์ง€๋„๋ก ์„ค์ •

* chore: ์ปดํฌ๋„ŒํŠธ default๋กœ exportํ•˜๋„๋ก ์„ค์ •

* refactor: handler๋ฅผ useEffect ์™ธ๋ถ€๋กœ ๋ถ„๋ฆฌ

* chore: svg import ์ปจ๋ฒค์…˜์— ๋งž์ถ”์–ด ์ด๋ฆ„ ์ˆ˜์ •

* [FE] feat: ์—๋Ÿฌ, ๋กœ๋”ฉ ํŽ˜์ด์ง€ ๊ตฌํ˜„ ๋ฐ ์ ์šฉ (#155)

* feat: ๋ฒ„ํŠผ ์ปดํฌ๋„ŒํŠธ์— ์•„์ด์ฝ˜์„ ์„ ํƒ์ ์œผ๋กœ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ณ€๊ฒฝ

- `icon` prop์„ ํ†ตํ•ด ๋ฒ„ํŠผ์— ์•„์ด์ฝ˜์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ณ€๊ฒฝ

* feat: ์—๋Ÿฌ ํŽ˜์ด์ง€๋ฅผ ์œ„ํ•œ ErrorSection ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„

- ์—๋Ÿฌ ๋กœ๊ณ , ๋ฉ”์‹œ์ง€, ์ƒˆ๋กœ๊ณ ์นจ ๋ฐ ํ™ˆ ์ด๋™ ๋ฒ„ํŠผ ์ œ๊ณต

* feat: ๋ผ์šฐํ„ฐ ์„ค์ •์—์„œ `errorElement`์— `ErrorPage` ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ถ”๊ฐ€

* feat: ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ ์ƒˆ๋กœ๊ณ ์นจ ๋ฐ ํ™ˆ ์ด๋™ ๊ธฐ๋Šฅ ์ถ”๊ฐ€

* feat: LoadingBar ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„

* feat: ๋กœ๋”ฉ ํŽ˜์ด์ง€ ์ถ”๊ฐ€ ๋ฐ ์ ์šฉ

- ๋กœ๋”ฉ ๋ฉ”์‹œ์ง€ ์ถ”๊ฐ€
- ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํŽ˜์ด์ง€, ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํŽ˜์ด์ง€, ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€์— ๋กœ๋”ฉ ํŽ˜์ด์ง€ ์ ์šฉ

* refactor: buttons ๋ฐฐ์—ด์„ ํ†ตํ•ด ๋ฒ„ํŠผ ์ƒ์„ฑ

* refactor: ์ฝ”๋“œ์ปจ๋ฒค์…˜์— ๋งž๊ฒŒ ์ฝ”๋“œ ์ˆ˜์ • ๋ฐ imageDescription์„ ๋ฒ„ํŠผ props์— ์ถ”๊ฐ€

* refactor: boolean ํƒ€์ž…์ถ”๋ก  ์ œ๊ฑฐ

* design: ์—๋Ÿฌ ์ปดํฌ๋„ŒํŠธ ํ™”๋ฉด ๊ฐ€์šด๋ฐ ๋ฐฐ์น˜

* design: ๋กœ๋”ฉ ์ปดํฌ๋„ŒํŠธ ํ™”๋ฉด ๊ฐ€์šด๋ฐ ๋ฐฐ์น˜

* [BE] refactor: ๋„๋ฉ”์ธ ์—ฐ๊ด€ ๊ด€๊ณ„ ์žฌ์ •์˜ (#156)

* refactor: ๋„๋ฉ”์ธ ์—ฐ๊ด€๊ด€๊ณ„ ์žฌ์ •์˜ ๋ฐ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋„๋ฉ”์ธ ์‚ญ์ œ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* test: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํ…Œ์ŠคํŠธ ์‚ญ์ œ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* fix: ์˜ˆ์•ฝ์–ด ์‚ฌ์šฉํ•˜์ง€ ์•Š๋„๋ก ์ˆ˜์ •

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* refactor: Review ๋„๋ฉ”์ธ์—์„œ reviewee ํ•„๋“œ ์ œ๊ฑฐ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* refactor: ๋ฆฌ๋ทฐ ์ €์žฅ ๊ธฐ๋Šฅ ๊ตฌํ˜„

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* refactor: ํ‚ค์›Œ๋“œ ์ €์žฅ ๊ธฐ๋Šฅ ๊ตฌํ˜„

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* refactor: ๋ฆฌ๋ทฐ ์ƒ์„ฑ ์š”์ฒญ ๊ฐ์ฒด ๊ตฌํ˜„

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* test: ๋ฆฌ๋ทฐ, ๋ฆฌ๋ทฐ ๋‚ด์šฉ ๋„๋ฉ”์ธ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* refactor: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ์‹œ ์งˆ๋ฌธ ๊ฒ€์ฆ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* fix: Review์˜ reviewGroupId ์ปฌ๋Ÿผ๋ช… ์ˆ˜์ •

* refactor: ๋ฆฌ๋ทฐ ์ƒ์„ฑ ์‹œ, ํ‚ค์›Œ๋“œ ๊ฒ€์ฆ์„ ๊ฐ์ฒด ๋ถ„๋ฆฌ

* refactor: ๋ฆฌ๋ทฐ ์ƒ์„ฑ ์‹œ, ์งˆ๋ฌธ ๊ฒ€์ฆ์„ ๊ฐ์ฒด ๋ถ„๋ฆฌ

* style: ์ฝ”๋“œ ์žฌ์ •๋ ฌ

* test: ๋ฆฌ๋ทฐ ์ƒ์„ฑ ๊ฒ€์ฆ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

* refactor: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํด๋ž˜์Šค ์‚ญ์ œ

* refactor: keyword ๊ด€๋ จ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํด๋ž˜์Šค ์‚ญ์ œ

* refactor: review ๊ด€๋ จ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํด๋ž˜์Šค ์‚ญ์ œ

* refactor: ๋ฐ์ดํ„ฐ ์ดˆ๊ธฐํ™” ๊ฐ์ฒด ์ˆ˜์ •

* test: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํ…Œ์ŠคํŠธ ์‚ญ์ œ

* refactor: ์˜ˆ์™ธ ๋ฉ”์„ธ์ง€ ๋งํˆฌ ํ†ต์ผ

* refactor: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์˜ˆ์™ธ ์ œ๊ฑฐ

* refactor: ์˜ˆ์™ธ ํด๋ž˜์Šค ํŒจํ‚ค์ง€ ๋ณ€๊ฒฝ

* refactor: NOT NULL ์ œ์•ฝ์กฐ๊ฑด ์ถ”๊ฐ€

* refactor: ํ…Œ์ŠคํŠธ์—์„œ๋งŒ ์‚ฌ์šฉ๋˜๋Š” ํ•จ์ˆ˜ ์ œ๊ฑฐ

* refactor: ํ…Œ์ŠคํŠธ ์‹คํ–‰ ์‹œ ๋ฐœ์ƒํ•˜๋Š” LazyInitializationException ํ•ด๊ฒฐ

* refactor: ํ‚ค์›Œ๋“œ ๊ฒ€์ฆ ํ•จ์ˆ˜ ์ˆœ์„œ ๋ณ€๊ฒฝ

* chore: ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ปจ๋ฒค์…˜ ํ†ต์ผ

* refactor: reviewRequestCode ๊ฒ€์ฆ ๋กœ์ง ์ด๋™

* refactor: ํ•„๋“œ์ธ questionRepository๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ๋ณ€๊ฒฝ

* refactor: ๋ฆฌ๋ทฐ์ด, ํ”„๋กœ์ ํŠธ ์ด๋ฆ„ ๊ธธ์ด ๊ฒ€์ฆ ํ•จ์ˆ˜ ๋ถ„๋ฆฌ

* test: ๋ฆฌ๋ทฐ ์ €์žฅ ์‹œ reviewKeywor ์ €์žฅ ๊ฒ€์ฆ ์ถ”๊ฐ€

---------

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>

* [All] infra: ๋””์Šค์ฝ”๋“œ ์›นํ›… ์‚ฌ์šฉํ•ด PR ์ƒ์„ฑ/์ฝ”๋ฉ˜ํŠธ ์‹œ ๋ฉ˜์…˜ (#169)

* feat: PR Request ์ƒ์„ฑ / Comment ์‹œ ๋””์Šค์ฝ”๋“œ ๋ฉ˜์…˜

* fix: Case-sensitive ID๋กœ ํ•ด๊ฒฐ, ALL webhook ์ถ”๊ฐ€

* fix: remove whitespace

* chore: rename workflow

* fix: fix shell script

* fix: step statement

* fix: remove trailing whitespace after equals sign

* [BE] feat: ๋ฆฌ๋ทฐ ๊ทธ๋ฃน ์ƒ์„ฑ API ๊ตฌํ˜„ (#163)

* feat: ๋žœ๋คํ•œ ๋ฌธ์ž์—ด ์ƒ์„ฑ๊ธฐ ๊ตฌํ˜„

Co-authored-by: donghoony <[email protected]>

* feat: ๋ฆฌ๋ทฐ ๊ทธ๋ฃน ์ƒ์„ฑ ์š”์ฒญ, ์‘๋‹ต ํ˜•์‹

Co-authored-by: donghoony <[email protected]>

* feat: ๋ฆฌ๋ทฐ ๊ทธ๋ฃน ์ƒ์„ฑ

Co-authored-by: hyeonjilee <[email protected]>
Co-authored-by: nayonsoso <[email protected]>

* feat: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ์ปจํŠธ๋กค๋Ÿฌ

Co-authored-by: hyeonjilee <[email protected]>
Co-authored-by: nayonsoso <[email protected]>

---------

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* [BE] refactor: ๋ฆฌ๋ทฐ ์ž‘์„ฑ์„ ์œ„ํ•œ ์ •๋ณด ์š”์ฒญ ๊ธฐ๋Šฅ ๋ฆฌํŒฉํ„ฐ๋ง (#162)

* refactor: ๋ถˆํ•„์š”ํ•œ update ๋ฐฉ์ง€

* feat: controller์— ๋ฆฌ๋ทฐ ์ƒ์„ฑ ์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต ๊ธฐ๋Šฅ ๊ตฌํ˜„

* feat: controller์— ๋ฆฌ๋ทฐ ์ž‘์„ฑ์„ ์œ„ํ•ด ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์‘๋‹ต ๊ธฐ๋Šฅ ๊ตฌํ˜„

* feat: service์— ๋ฆฌ๋ทฐ ์ž‘์„ฑ์„ ์œ„ํ•ด ํ•„์š”ํ•œ ์ •๋ณด ์กฐํšŒ
 ๊ธฐ๋Šฅ ๊ตฌํ˜„

* chore: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” dto ์‚ญ์ œ

* test: ๋ฆฌ๋ทฐ ๋ฆฌ๋ทฐ ์ž‘์„ฑ์„ ์œ„ํ•ด ํ•„์š”ํ•œ ์ •๋ณด ์กฐํšŒ ๊ธฐ๋Šฅ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ

* refactor: swagger ์„ค์ • ์ผ๋ถ€ ์ˆ˜์ • ๋ฐ ์—๋Ÿฌ ์‘๋‹ต์ฝ”๋“œ ๋…ธ์ถœ๋˜๋„๋ก ๋ณ€๊ฒฝ

* refactor: service์—์„œ ์›์‹œํƒ€์ž… long์„ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ๋ณ€๊ฒฝ

* docs: api ๋ฌธ์„œ dto ํ•ญ๋ชฉ์„ค๋ช… ๋ณ€๊ฒฝ

* test: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ณ€์ˆ˜ ์„ ์–ธํ•˜์ง€ ์•Š๋„๋ก ๋ณ€๊ฒฝ

* docs: api ๋ฌธ์„œ ๊ฒ€์ฆ ๋‚ด์šฉ์— ๋Œ€ํ•œ ์–ด์ฒด ๋ณ€๊ฒฝ

* refactor: ํŠธ๋žœ์žญ์…˜ ์กฐํšŒ ๋ช…์‹œ ์ถ”๊ฐ€

* refactor: dto ์ด๋ฆ„ ๋ณ€๊ฒฝ

* [FE] ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€์— react-query ์ถ”๊ฐ€ ๋ฐ ๋ฆฌํŒฉํ† ๋ง (#161)

* fix: src/index.tsx์—์„œ enableMocking ์ œ๊ฑฐ

* feat: ๋ฆฌ๋ทฐ ๊ทธ๋ฃน ์ƒ์„ฑ ์‹œ ์ฝ”๋ฉ˜ํŠธ ์ปดํฌ๋„ŒํŠธ๋ช… ๋ณ€๊ฒฝ ๋ฐ ๊ธฐ๋ณธ๊ฐ’ ์„ค์ •

- ์ปดํฌ๋„ŒํŠธ๋ช… ๋ณ€๊ฒฝ: RevewComment -> ReveweeComments
-  reviewGroup์˜ description์ด ๋นˆ๋ฌธ์ž์—ด์ด๋ฉด ๊ธฐ๋ณธ๊ฐ’์„ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒƒ์œผ๋กœ ๋ณ€๊ฒฝ

* refactor: ์„œ๋ฒ„ DB์— ์žˆ๋Š” ๋ฆฌ๋ทฐ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ์ƒ์ˆ˜ํ™”

- ํ˜„์žฌ DB์— ์žˆ๋Š” ๋ฆฌ๋ทฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชฉ ์„œ๋ฒ„์—์„œ๋„ ์‚ฌ์šฉํ•˜๊ณ , ์‚ฌ์ด๋“œ๋ฐ” ํŽ˜์ด์ง€ ์ด๋™ ์‹œ์—๋„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ด€๋ จ value๋“ค์„ ์ƒ์ˆ˜ํ™” ํ•จ

* feat : QueryClient, QueryClientProvider ์ ์šฉ

- src/index.tsx์— QueryClient, QueryClientProvider ์ ์šฉ

* fix: dependencies์— ์žˆ๋Š” ํ…Œ์ŠคํŠธ ํŒจํ‚ค์ง€๋“ค์„ devDependencies๋กœ ์˜ฎ๊น€

* feat: ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€์— react-query ์ ์šฉ

* feat : msw์— ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€ 404 ์˜ค๋ฅ˜ ์ถ”๊ฐ€

* ci: react-error-boundary ์„ค์น˜

* feat: Outlet์— QueryErrorResetBoundary,ErrorBoundary, Suspense ์ ์šฉ

* feat: ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€์— useSuspenseQuery ์ ์šฉ

* refactor: ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€ resource, queryString key ์ƒ์ˆ˜ํ™”

* refactor:  ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€ react-query key ์ƒ์ˆ˜ํ™”

* refactor: ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€ ์ปดํฌ๋„ŒํŠธ ์†์—์„œ๋งŒ ์‚ฌ์šฉํ•˜๋Š” ์ƒ์ˆ˜๋“ค ์ƒ์ˆ˜ํ™”

* refactor: DetailedReviewPage/components์— index.tsx๋ฅผ ์ถ”๊ฐ€ํ•ด import ๊ฒฝ๋กœ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ˆ˜์ •

* feat: error ์ „ํŒŒ๋ฅผ ์œ„ํ•œ QueryClient ์˜ต์…˜ ์ถ”๊ฐ€

-  react-query์˜ query, mutation์—์„œ error๊ฐ€ ์ „ํŒŒ๋˜๋„๋ก QueryClient ์˜ต์…˜ ์„ค์ •

* fix: ErrorPage์˜ SideModal์— closeModal props๋กœ ์คŒ

* refactor: ErrorSection ์œ„์น˜ ๋ณ€๊ฒฝ(src/pages/ErrorPage -> src/components/error)

* feat: ErrorFallback ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ

* feat: ErrorSuspenseContainer ์ƒ์„ฑ ๋ฐ App.tsx์— ์ ์šฉ

* chore: constants/index.ts export ๊ฒฝ๋กœ ๋ณ€๊ฒฝ

- ์ค‘๋ณต๋˜๋Š” apiErrorMessage ์‚ญ์ œ
- queryKeys ์ถ”๊ฐ€

* chore: 3์ฐจ-1์ฃผ์ฐจ ํ•ต์‹ฌ ๊ธฐ๋Šฅ ์‹œํ˜„ ๋•Œ ํ•„์š” ์—†๋Š” ์ฝ”๋“œ ์ฃผ์„ ์ฒ˜๋ฆฌ

* docs: ErrorPage์˜ ERROR_MESSAGE ์ˆ˜์ •

* design: formWidth ๋ณ€๊ฒฝ ๋ฐ fontSize์— 1.4rem ์ถ”๊ฐ€

* feat: ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€์— ๋ฆฌ๋ทฐ์ด ์ด๋ฆ„ ์ถ”๊ฐ€

- ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€ ๋ชฉ๋ฐ์ดํ„ฐ, ๋ฐ์ดํ„ฐ ํƒ€์ž…์— ๋ฆฌ๋ทฐ์ด ์ด๋ฆ„ ์ถ”๊ฐ€
- ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€ ์ปดํฌ๋„ŒํŠธ์— ๋ฆฌ๋ทฐ์ด ์ด๋ฆ„ ์ถ”๊ฐ€ ๋ฐ ๊ด€๋ จ ์Šคํƒ€์ผ ์ถ”๊ฐ€

* refactor: ๋ถˆํ•„์š”ํ•œ export ์‚ญ์ œ

* chore: type๋ช… ์ˆ˜์ • (RevieweeCommentProps =>RevieweeCommentsProps)

* refactor: ErrorSection์œผl Button ์ˆ˜์ •

* refactor: ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€ ๋ฐ์ดํ„ฐ ํƒ€์ž… ๋ณ€๊ฒฝ์— ๋”ฐ๋ฅธ ์ˆ˜์ •

* refactor: ErrorSuspenseContainer ์ ์šฉ ์œ„์น˜ ๋ณ€๊ฒฝ

- App๊ฐ€ ์•„๋‹Œ router์˜ element์—์„œ ์ ์šฉํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณ€๊ฒฝ

* refactor: ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€ ๋ฐ์ดํ„ฐ ํƒ€์ž… ๊ฐ•์ œ ๋ฐฉ๋ฒ• ๋ณ€๊ฒฝ

* chore: ๋ถˆํ•„์š”ํ•œ ์ฃผ์„ ์‚ญ์ œ

* refactor: ErrorSection์˜ buttons ๋„ค์ด๋ฐ ๋ณ€๊ฒฝ ๋ฐ ์š”์†Œ์— key ์ถ”๊ฐ€

- buttons -> buttonList

* chore: ์Šคํƒ€์ผ ์ฃผ์„์— NOTE ์ถ”๊ฐ€

* [BE] feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ์กฐํšŒ  (#179)

* feat: ๋ฆฌ๋ทฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ

Co-authored-by: nayonsoso <[email protected]>

* feat: ๋‚ด๊ฐ€ ๋ฐ›์€ ๋ฆฌ๋ทฐ ๋ชฉ๋ก ์‘๋‹ต ์ƒ์„ฑ

Co-authored-by: donghoony <[email protected]>

* feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ์กฐํšŒ

Co-authored-by: nayonsoso <[email protected]>

* refactor: Cascade ์ ์šฉ์œผ๋กœ ๋ถˆํ•„์š”ํ•œ save ์ œ๊ฑฐ

Co-authored-by: nayonsoso <[email protected]>

* refactor: ๋ฆฌ๋ทฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์ƒ์„ฑ ๊ฐ์ฒด ๋„์ถœ

Co-authored-by: nayonsoso <[email protected]>

---------

Co-authored-by: nayonsoso <[email protected]>

* fix: ๋ธŒ๋ผ์šฐ์ € ํƒ€์ดํ‹€ ์˜คํƒ€ ์ˆ˜์ • (#167)

* [BE] feat: ๋ฆฌ๋ทฐ ์ƒ์„ธ ์กฐํšŒ ๊ธฐ๋Šฅ ๊ตฌํ˜„ (#182)

* feat: ์ปจํŠธ๋กค๋Ÿฌ ๋ฆฌ๋ทฐ
์ƒ์„ธ ์กฐํšŒ api ์‘๋‹ต ๊ธฐ๋Šฅ ๊ตฌํ˜„

* feat: ๋ฆฌ๋ทฐ ์ƒ์„ธ ์กฐํšŒ api ์‘๋‹ต ๊ฐ์ฒด ๊ตฌํ˜„

* refactor: ๋ฆฌ๋ทฐ ์ƒ์„ธ ์กฐํšŒ api ์‘๋‹ต ๊ฐ์ฒด๋ช… ๋ณ€๊ฒฝ

* feat: ์„œ๋น„์Šค ๋ฆฌ๋ทฐ ์ƒ์„ธ ์กฐํšŒ ๊ธฐ๋Šฅ ๊ตฌํ˜„

* test: ๋ฆฌ๋ทฐ ์ƒ์„ธ ์กฐํšŒ ๊ธฐ๋Šฅ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

* style: ์˜คํƒ€ ๋ฐ ๊ฐœํ–‰ ์ˆ˜์ •

* refactor: ๋‚ ์งœ ์‘๋‹ต ์‹œ, ์ผ์ž๊นŒ์ง€๋งŒ ์‘๋‹ตํ•˜๋„๋ก ๋ณ€๊ฒฝ

* refactor: ๋ฆฌ๋ทฐ ์กฐํšŒ ๊ถŒํ•œ ๊ฒ€์ฆ ๋กœ์ง์„ repository ์‚ฌ์šฉํ•˜๋„๋ก ๋ณ€๊ฒฝ

* refactor: ๊ฒ€์ฆ๋ฉ”์„ธ์ง€ ๋ณ€๊ฒฝ

* refactor: ๋ฆฌ๋ทฐ ์„œ๋น„์Šค์—์„œ ๋ฆฌ๋ทฐ ๊ทธ๋ฃน์„ ์ฐพ์„ ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ์˜ˆ์™ธ ํด๋ž˜์Šค ๋ณ€๊ฒฝ

* refactor: ๋ฆฌ๋ทฐ ์ƒ์„ธ ์กฐํšŒ ๋ฉ”์„œ๋“œ๋ช… ๋ณ€๊ฒฝ

* refactor: ํ—ค๋”๋ช… ์ƒ์ˆ˜ํ™”

* [FE] recoil์„ ํ†ตํ•œ groupAccessCode ์ „์—ญ ์ƒํƒœ ๊ด€๋ฆฌ (#180)

* ci: recoil ์„ค์น˜

* feat: src/index.ts์— RecoilRoot ์ ์šฉ

* feat: groupAccessCode ์— ๋Œ€ํ•œ atom ์ƒํƒœ ์ถ”๊ฐ€

* feat: useGroupAccessCode ํ›… ์ถ”๊ฐ€

- useGroupAccessCode : groupAccessCode์˜ atom ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ํ›…

* [BE] ๋‚ด๊ฐ€ ๋ฐ›์€ ๋ฆฌ๋ทฐ ๋ชฉ๋ก์„ ์ตœ์‹ ์ˆœ์œผ๋กœ ์กฐํšŒํ•œ๋‹ค. (#189)

* fix: ๋‚ ์งœ ์ˆœ ์ •๋ ฌ

* refactor: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ณ€์ˆ˜ ์ œ๊ฑฐ

---------

Co-authored-by: donghoony <[email protected]>

* [BE] ์ดˆ๊ธฐ ๋ฐ์ดํ„ฐ ์„ค์ • (#187)

* feat: ์ดˆ๊ธฐ ๋ฐ์ดํ„ฐ ์„ค์ •

* build: CD ์‹œ local profile ์„ค์ •

---------

Co-authored-by: donghoony <[email protected]>

* [FE] feat: Alert Modal๊ณผ Error Alert Modal ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„ ๋ฐ Button ์ปดํฌ๋„ŒํŠธ ํ™•์žฅ (#165)

* refactor: ๊ณตํ†ต ๋ฒ„ํŠผ ์ปดํฌ๋„ŒํŠธ๊ฐ€ children๊ณผ style์„ ๋ฐ›๋„๋ก ์ˆ˜์ •

* chore: error alert modal์—์„œ ์‚ฌ์šฉํ•  primary ์ƒ‰์ƒ์˜ ๊ฒฝ๊ณ  ์‚ผ๊ฐํ˜• ์ถ”๊ฐ€

* feat: ErrorAlertModal ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„

* feat: AlertModal ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„

* chore: ๋ณ€๊ฒฝ๋œ Button ์ปดํฌ๋„ŒํŠธ์˜ ๊ตฌ์กฐ์— ๋งž๊ฒŒ ์ฝ”๋“œ ์ˆ˜์ •

* fix: AlertModal์ด Esc ๋˜๋Š” background์˜ ํด๋ฆญ์œผ๋กœ ๋‹ซํžˆ์ง€ ์•Š๋„๋ก ์ˆ˜์ •

* chore: AlertModal๊ณผ ErrorAlertModal export

* refactor: Button ์ปดํฌ๋„ŒํŠธ๊ฐ€ type์„ ๋ณ„๋„๋กœ ๋ฐ›๋„๋ก ์ˆ˜์ • ๋ฐ ๊ธฐ์กด์˜ buttonType์„ styleType์œผ๋กœ ๋ณ€๊ฒฝ

* refactor: background ํด๋ฆญ ๋˜๋Š” Esc ํ‚ค๋ฅผ ํ†ตํ•ด ๋ชจ๋‹ฌ์„ ๋‹ซ๋Š” ๊ฒƒ์„ ๋ถ„๋ฆฌ

* refactor: AlertModal์˜ ๋ชจ๋‹ฌ ๋‹ซ๋Š” ์ •์ฑ…์„ props๋กœ ์„ ํƒ ๊ฐ€๋Šฅํ•˜๋„๋ก ์ˆ˜์ •

* refactor: ErrorAlertModal์„ AlertModal์„ ์‚ฌ์šฉํ•ด ๊ตฌํ˜„

* refactor: ๋‹ซ๊ธฐ ๋ฒ„ํŠผ ์ด์™ธ์˜ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ชจ๋‹ฌ์„ ๋‹ซ์„ ์ˆ˜ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€์™€ handler๋ฅผ props๋กœ ์ „๋‹ฌ๋ฐ›๋„๋ก ๋ณ€๊ฒฝ

* refactor: ๋น„์–ด์žˆ๋Š” ์Šคํƒ€์ผ ์ปดํฌ๋„ŒํŠธ ์ œ๊ฑฐ

* [FE] ๋žœ๋”ฉ ํŽ˜์ด์ง€ ํผ๋ธ”๋ฆฌ์‹ฑ ๋ฐ ๋””๋ฐ”์šด์‹ฑ ํ•จ์ˆ˜ ์ถ”๊ฐ€ (#181)

* feat: Input ๊ณตํ†ต ์ปดํฌ๋„ŒํŠธ ์ œ์ž‘

* feat: LandingPage ์ œ์ž‘

* fix: Input์˜ type์„ text๋กœ ์ˆ˜์ •

* feat: debounce ํ•จ์ˆ˜ ์ž‘์„ฑ

* docs: debounce ํ•จ์ˆ˜์— TODO ์ฃผ์„ ๋ฐ TSdoc ์ถ”๊ฐ€ ์™ธ ๊ฐ„๋‹จํ•œ if๋ฌธ ๋ฆฌํŒฉํ† ๋ง

* chore: ์ž˜๋ชป๋œ ํŒŒ์ผ ๊ตฌ์กฐ ๋ฐ ๋””๋ ‰ํ† ๋ฆฌ๋ช… ์ˆ˜์ •

* chore: px์„ rem์œผ๋กœ ์ˆ˜์ •

* refactor: ๋™์  ์Šคํƒ€์ผ๋ง์— css ๋Œ€์‹  styled ์Šคํƒ€์ผ ์ ์šฉ

* refactor: Input ์Šคํƒ€์ผ์„ ๋”์šฑ ์œ ์—ฐํ•˜๊ฒŒ ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก ์ˆ˜์ •, ์Šคํƒ€์ผ ๋ฆฌํ„ฐ๋Ÿด ์ œ๊ฑฐ

* refactor: Input์— ์ ์šฉ๋œ ์ปค์Šคํ…€ ์Šคํƒ€์ผ๋ง์„ $style๋กœ ์ˆ˜์ •

* fix: undefined ๋ฆฌํ„ด์„ null ๋ฆฌํ„ด์œผ๋กœ ์ˆ˜์ •

* refactor: flex-direction์— ๋ณ„๋„์˜ ์ปค์Šคํ…€ ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹  React ๋‚ด์žฅ ํƒ€์ž…์„์‚ฌ์šฉํ•˜๋„๋ก ์ˆ˜์ •

* refactor: Input ์ปดํฌ๋„ŒํŠธ์—์„œ rest props ์ œ๊ฑฐ

* chore: ๋ถˆํ•„์š”ํ•œ import ์ œ๊ฑฐ

* [FE] feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํŽ˜์ด์ง€์— ๋ณ€๊ฒฝ๋œ API ์—ฐ๋™ ํ›„, ๋ฆฌ์•กํŠธ ์ฟผ๋ฆฌ ์ ์šฉ ๋ฐ ๋ฌดํ•œ ์Šคํฌ๋กค ๊ตฌํ˜„ (#192)

* design: ๋ฆฌ๋ทฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์นด๋“œ ๋ฐฐ๊ฒฝ์ƒ‰ ๋ณ€๊ฒฝ ๋ฐ ์ „์ฒด ๊ฐ์‹ธ๋Š” div์— ์•„๋ž˜์ชฝ ์—ฌ๋ฐฑ ์ถ”๊ฐ€

* refactor: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ์ธํ„ฐํŽ˜์ด์Šค ์ถ”๊ฐ€ ๋ฐ ์ˆ˜์ •

- ReviewPreviewList ์ธํ„ฐํŽ˜์ด์Šค ์ถ”๊ฐ€
  - size, lastReviewId, reviews ํ•„๋“œ ์ถ”๊ฐ€
- ReviewPreview ์ธํ„ฐํŽ˜์ด์Šค ์ˆ˜์ •
  - keywords ํ•„๋“œ๋ฅผ Keyword[] ํƒ€์ž…์œผ๋กœ ๋ณ€๊ฒฝ

* chore: ๋‹ซํžŒ ์ž๋ฌผ์‡ ๋กœ ์•„์ด์ฝ˜ ๋ณ€๊ฒฝ

* feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํŽ˜์ด์ง€์—์„œ ๋ฆฌ์•กํŠธ ์ฟผ๋ฆฌ ์ ์šฉ

* refactor: ์›น ์ ‘๊ทผ์„ฑ์„ ์œ„ํ•œ alt, aria-label ์ถ”๊ฐ€ ๋ฐ ์ฝ”๋“œ ์ปจ๋ฒค์…˜์— ๋งž์ถฐ ์ฝ”๋“œ ์ˆ˜์ •

* feat: ๋ฆฌ๋ทฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๋ฆฌ์ŠคํŠธ ํ•ธ๋“ค๋Ÿฌ์— ํŽ˜์ด์ง€๋„ค์ด์…˜ ๋กœ์ง ์ถ”๊ฐ€

- ๊ธฐ์กด์˜ ๋‹จ์ˆœ ๋ฐ˜ํ™˜ ํ•ธ๋“ค๋Ÿฌ์—์„œ ํŽ˜์ด์ง€๋„ค์ด์…˜ ๊ธฐ๋Šฅ์„ ํฌํ•จํ•œ ํ•ธ๋“ค๋Ÿฌ๋กœ ์ˆ˜์ •

* feat: `SideModal` ์ปดํฌ๋„ŒํŠธ์— `closeModal` prop ์ถ”๊ฐ€

* feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํŽ˜์ด์ง€์— ๋ฌดํ•œ ์Šคํฌ๋กค ๊ธฐ๋Šฅ ์ถ”๊ฐ€

* refactor: useReviewPreviewList ํ›… ์ƒ์„ฑํ•˜์—ฌ ๋ฐ์ดํ„ฐ ํ˜ธ์ถœ ๋กœ์ง ๋ถ„๋ฆฌ

* refactor: ๋ถˆํ•„์š”ํ•œ ButtonContainer ์ œ๊ฑฐ

* design: px์„ rem์œผ๋กœ ๋ณ€๊ฒฝ

* refactor: Button ์ปดํฌ๋„ŒํŠธ์— key ์ถ”๊ฐ€

* feat: ๋ฆฌ๋ทฐ์ด, ํ”„๋กœ์ ํŠธ๋ช…์„ ๋ณด์—ฌ์ฃผ๋Š” DescriptionSection ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„

* refactor: ๋ฆฌ๋ทฐ ๋ชฉ๋ก์„ ๋ถˆ๋Ÿฌ์˜ค๋Š” api ๋ณ€๊ฒฝ ์ด์Šˆ๋กœ ์ธํ•ด ์—”๋“œํฌ์ธํŠธ, fetch ํ•จ์ˆ˜ ์ˆ˜์ •

* chore: fragment ์ œ๊ฑฐ

* refactor: api ๋ณ€๊ฒฝ์— ๋”ฐ๋ผ ReviewPreviewList, ReviewPreview ์ธํ„ฐํŽ˜์ด์Šค ์ˆ˜์ •

* refactor: ๋ณ€๊ฒฝ๋œ api์— ๋”ฐ๋ผ props ์ˆ˜์ •

* refactor: reviewerGroup, isPublic ์ œ๊ฑฐ

* refactor: endPoint.gettingReviewList ํ˜ธ์ถœ ์ธ์ž ๋ณ€๊ฒฝ

* refactor: DescriptionSection์—์„œ ReviewInfoSection์œผ๋กœ ์ปดํฌ๋„ŒํŠธ๋ช… ๋ณ€๊ฒฝ

* refactor: useSuspenseQuery ์ ์šฉ ํ›„, ๋ฌดํ•œ์Šคํฌ๋กค ๊ด€๋ จ ์ฝ”๋“œ ์ฃผ์„ ์ฒ˜๋ฆฌ

---------

Co-authored-by: badahertz52 <[email protected]>

* [FE] feat: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํŽ˜์ด์ง€์™€ ์„œ๋ฒ„ ๋ฐ ๋ชจ๋‹ฌ ์—ฐ๋™ (#191)

* chore: ๋ณ€๊ฒฝ๋œ UI ์ ์šฉ

* design: ํ‚ค์›Œ๋“œ ๋ฌธํ•ญ ์•ˆ๋‚ด ๋ฌธ๊ตฌ ์ˆ˜์ •

* feat: Textarea ๊ณตํ†ต ์ปดํฌ๋„ŒํŠธ ๋ผˆ๋Œ€ ๊ตฌํ˜„

* chore: ์ˆ˜์ •๋œ api ์—”๋“œํฌ์ธํŠธ ๋ฐ queryparams ์ ์šฉ

* design: reset.ts ์ถ”๊ฐ€ ์„ค์ •

* chore: ๋ณ€๊ฒฝ๋œ api ๋ฌธ์„œ์— ๋งž๊ฒŒ ํƒ€์ž… ์ˆ˜์ •

* feat: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํŽ˜์ด์ง€์™€ ๋ชจ๋‹ฌ ๋ฐ ์„œ๋ฒ„ ์—ฐ๋™

* chore: ์‚ฌ์ด๋“œ๋ฐ” ๋ฉ”๋‰ด ํด๋ฆญ ์‹œ ์ด๋™ํ•  path ์ˆ˜์ •

* fix: ConfirmModal์—์„œ background ํด๋ฆญ ์‹œ ๋ชจ๋‹ฌ์ด ๋‹ซํžˆ์ง€ ์•Š๋Š” ํ˜„์ƒ ์ˆ˜์ •

* design: AlertModal ๋ฐ ErrorAlertModal ๋””์ž์ธ ์ˆ˜์ •

* chore: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ๋ฐ ์ž‘์„ฑ ์™„๋ฃŒ ํŽ˜์ด์ง€ ๋ผ์šฐํ„ฐ ์ถ”๊ฐ€

* chore: ๋ถˆํ•„์š”ํ•œ ์ฃผ์„ ์ œ๊ฑฐ ๋ฐ ์‚ฌ์ด๋“œ๋ฐ”์—์„œ ๋ฆฌ๋ทฐ ์ž‘์„ฑ ๋ฉ”๋‰ด ์ˆจ๊น€ ์ฒ˜๋ฆฌ

* chore: ๋ฆฌ๋ทฐ ์ œ์ถœ ํŽ˜์ด์ง€ ๋ฒ„ํŠผ ํƒ€์ž… ๋ช…์‹œ

* chore: svg import ์ปจ๋ฒค์…˜์— ๋งž๊ฒŒ ์ˆ˜์ •

* [FE] ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํŽ˜์ด์ง€, ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€์—์„œ ๋กœ๊ทธ์ธ์„ ์—ฐ๋™ (#193)

* design: ๋ฆฌ๋ทฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์นด๋“œ ๋ฐฐ๊ฒฝ์ƒ‰ ๋ณ€๊ฒฝ ๋ฐ ์ „์ฒด ๊ฐ์‹ธ๋Š” div์— ์•„๋ž˜์ชฝ ์—ฌ๋ฐฑ ์ถ”๊ฐ€

* refactor: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ์ธํ„ฐํŽ˜์ด์Šค ์ถ”๊ฐ€ ๋ฐ ์ˆ˜์ •

- ReviewPreviewList ์ธํ„ฐํŽ˜์ด์Šค ์ถ”๊ฐ€
  - size, lastReviewId, reviews ํ•„๋“œ ์ถ”๊ฐ€
- ReviewPreview ์ธํ„ฐํŽ˜์ด์Šค ์ˆ˜์ •
  - keywords ํ•„๋“œ๋ฅผ Keyword[] ํƒ€์ž…์œผ๋กœ ๋ณ€๊ฒฝ

* chore: ๋‹ซํžŒ ์ž๋ฌผ์‡ ๋กœ ์•„์ด์ฝ˜ ๋ณ€๊ฒฝ

* feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํŽ˜์ด์ง€์—์„œ ๋ฆฌ์•กํŠธ ์ฟผ๋ฆฌ ์ ์šฉ

* refactor: ์›น ์ ‘๊ทผ์„ฑ์„ ์œ„ํ•œ alt, aria-label ์ถ”๊ฐ€ ๋ฐ ์ฝ”๋“œ ์ปจ๋ฒค์…˜์— ๋งž์ถฐ ์ฝ”๋“œ ์ˆ˜์ •

* feat: ๋ฆฌ๋ทฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๋ฆฌ์ŠคํŠธ ํ•ธ๋“ค๋Ÿฌ์— ํŽ˜์ด์ง€๋„ค์ด์…˜ ๋กœ์ง ์ถ”๊ฐ€

- ๊ธฐ์กด์˜ ๋‹จ์ˆœ ๋ฐ˜ํ™˜ ํ•ธ๋“ค๋Ÿฌ์—์„œ ํŽ˜์ด์ง€๋„ค์ด์…˜ ๊ธฐ๋Šฅ์„ ํฌํ•จํ•œ ํ•ธ๋“ค๋Ÿฌ๋กœ ์ˆ˜์ •

* feat: `SideModal` ์ปดํฌ๋„ŒํŠธ์— `closeModal` prop ์ถ”๊ฐ€

* feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํŽ˜์ด์ง€์— ๋ฌดํ•œ ์Šคํฌ๋กค ๊ธฐ๋Šฅ ์ถ”๊ฐ€

* refactor: useReviewPreviewList ํ›… ์ƒ์„ฑํ•˜์—ฌ ๋ฐ์ดํ„ฐ ํ˜ธ์ถœ ๋กœ์ง ๋ถ„๋ฆฌ

* refactor: ๋ถˆํ•„์š”ํ•œ ButtonContainer ์ œ๊ฑฐ

* design: px์„ rem์œผ๋กœ ๋ณ€๊ฒฝ

* refactor: Button ์ปดํฌ๋„ŒํŠธ์— key ์ถ”๊ฐ€

* feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก,๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€ api ํ•ธ๋“ค๋Ÿฌ์—์„œ groupAccessCode๋ฅผ header์— ์ถ”๊ฐ€

* feat: DetailedReviewPage ์—์„œ groupAccessCode ์ƒํƒœ ์ ์šฉ

* feat: LoginRedirectModal ์ƒ์„ฑ

* refactor: ErrorSection ๋ฆฌํŒฉํ† ๋ง

* feat: ๋ฆฌ๋ทฐ์ด, ํ”„๋กœ์ ํŠธ๋ช…์„ ๋ณด์—ฌ์ฃผ๋Š” DescriptionSection ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„

* refactor: ๋ฆฌ๋ทฐ ๋ชฉ๋ก์„ ๋ถˆ๋Ÿฌ์˜ค๋Š” api ๋ณ€๊ฒฝ ์ด์Šˆ๋กœ ์ธํ•ด ์—”๋“œํฌ์ธํŠธ, fetch ํ•จ์ˆ˜ ์ˆ˜์ •

* feat: ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€์— groupAccessCode ์ƒํƒœ๋ฅผ ์ ์šฉ

- ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€์— groupAccessCode ์ƒํƒœ๊ฐ’์ด ์žˆ์œผ๋ฉด api์š”์ฒญ์„ ํ•˜๊ณ  ์—†์œผ๋ฉด LoginRedirectModal์„ ๋„์–ด์„œ ๋กœ๊ทธ์ธ ์œ ๋„ํ•˜๋Š” ๊ธฐ๋Šฅ ์ถ”๊ฐ€
- DetailedPage/index.tsx์— ์žˆ๋˜ ๋‚ด์šฉ์„ DetailedReivewPageContents๋กœ ์ด๋™
-  DetailedPage/index.tsx์—์„œ ErrorSuspenseContainer ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ˆ˜์ •

* chore: fragment ์ œ๊ฑฐ

* refactor: api ๋ณ€๊ฒฝ์— ๋”ฐ๋ผ ReviewPreviewList, ReviewPreview ์ธํ„ฐํŽ˜์ด์Šค ์ˆ˜์ •

* fix: ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€ keyword ํƒ€์ž… ๋ณ€๊ฒฝ์— ๋”ฐ๋ฅธ ์ˆ˜์ •

* refactor: ๋ณ€๊ฒฝ๋œ api์— ๋”ฐ๋ผ props ์ˆ˜์ •

* refactor: reviewerGroup, isPublic ์ œ๊ฑฐ

* feat: ErrorFallback ์˜ ํ™ˆ ์ด๋™ ๊ฒฝ๋กœ ๋ณ€๊ฒฝ

* refactor: endPoint.gettingReviewList ํ˜ธ์ถœ ์ธ์ž ๋ณ€๊ฒฝ

* refactor: DetailedReviewPage์—์„œ groupAccessCode ๊ฐ€์ ธ์˜ค๋Š” ๋ฐฉ์‹ ๋ณ€๊ฒฝ

- useRecoilValue๊ฐ€ ์•„๋‹Œ useGroupAccessCode์—์„œ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์œผ๋กœ ๋ณ€๊ฒฝ

* refactor: DescriptionSection์—์„œ ReviewInfoSection์œผ๋กœ ์ปดํฌ๋„ŒํŠธ๋ช… ๋ณ€๊ฒฝ

* refactor: ErrorPage์—์„œ Home ์ด๋™ ๋ฒ„ํŠผ์„ ์œ ๋„ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝ

- route์˜ค๋ฅ˜ ๋ฉ”์„ธ์ง€์™€ api์˜ค๋ฅ˜ ๋ฉ”์„ธ์ง€๋ฅผ errorMessage ํŒŒ์ผ์—์„œ ๊ด€๋ฆฌํ•˜๋„๋ก ์ˆ˜์ •
- ErrorPage์—์„œ errorMessage๊ฐ€ ROUTE_ERROR_MESSAGE์ด๋ฉด ํ™ˆ ๋ฒ„ํŠผ์ด ํ™”๋ฉด์ƒ์—์„œ ๋จผ์ € ๋‚˜์˜ค๋„๋ก ์ˆ˜์ •
- ์ƒ‰์ƒ๋ณ„ ํ™ˆ,refresh ์•„์ด์ฝ˜ SVG ์ถ”๊ฐ€

* refactor: useSuspenseQuery ์ ์šฉ ํ›„, ๋ฌดํ•œ์Šคํฌ๋กค ๊ด€๋ จ ์ฝ”๋“œ ์ฃผ์„ ์ฒ˜๋ฆฌ

* feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํŽ˜์ด์ง€ ๋ชฉ ์„œ๋ฒ„ ํ•ธ๋“ค๋Ÿฌ ๋ฐ ๋ชฉ๋ฐ์ดํ„ฐ ์ˆ˜์ •

* feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํŽ˜์ด์ง€์—  groupAccessCode ์ „์—ญ ์ƒํƒœ ์ ์šฉ

* refactor: ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ ์‚ญ์ œ

* chore: ์˜คํƒ€ ์ˆ˜์ •

---------

Co-authored-by: soosoo22 <[email protected]>

* [FE] feat: ๋žœ๋”ฉ ํŽ˜์ด์ง€ API ์—ฐ๋™ (#196)

* feat: ๊ทธ๋ฃน ์ƒ์„ฑ์„ ์œ„ํ•œ ์—”๋“œํฌ์ธํŠธ ์ƒ์„ฑ ๋ฐ ๋ฆฌ๋ทฐ ๋ชฉ๋ก ์—”๋“œํฌ์ธํŠธ, api ํ˜ธ์ถœ ํ•จ์ˆ˜ ์ˆ˜์ •

* fix: CSSProperties ๋Œ€์‹  ์ปค์Šคํ…€ ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜๋˜ ์ธํ„ฐํŽ˜์ด์Šค ์ˆ˜์ •

* feat: ReviewAccessForm์— ๋ชจ๋‹ฌ ๋ฐ API ์—ฐ๊ฒฐ

* fix: ๋ˆ„๋ฝ๋๋˜ CopyIcon ํŒŒ์ผ ์—…๋กœ๋“œ

* feat: ํ™•์ธ ์ฝ”๋“œ ์ž…๋ ฅ API ์—ฐ๋™

* feat: ์™„์ „ํ•œ ๋ฆฌ๋ทฐ ์ž‘์„ฑ URL์„ ๋ฆฌํ„ดํ•˜๋Š” ํ•จ์ˆ˜ ์ž‘์„ฑ

* [FE] fix: ๋ˆ„๋ฝ๋๋˜ ๋ฒ„ํŠผ ๋ฆฌํŒฉํ† ๋ง ๋ฐ ์—”๋“œํฌ์ธํŠธ ๋ณต๊ตฌ (#199)

* fix: ์ถฉ๋Œ ํ•ด๊ฒฐ ๊ณผ์ •์—์„œ ๋ˆ„๋ฝ๋๋˜ ์—”๋“œํฌ์ธํŠธ ๋ณต๊ตฌ

* fix: ๋ฒ„ํŠผ ๋ฆฌํŒฉํ† ๋ง ๋ฐ˜์˜

* feat: textarea์— ์ตœ์†Œ ์ž…๋ ฅ ๊ธ€์ž ์ˆ˜๋ฅผ ๋งŒ์กฑํ•˜์ง€ ๋ชปํ•œ ๊ฒฝ์šฐ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ ํ‘œ์‹œ ๊ธฐ๋Šฅ ๊ตฌํ˜„ (#200)

* feat: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ์™„๋ฃŒ ํŽ˜์ด์ง€์—์„œ ํ™ˆ ๋ฒ„ํŠผ ์ถ”๊ฐ€ (#201)

* docs: ๋ฆฌ๋ทฐ๋ฏธ ์†Œ๊ฐœ๊ธ€ ์ž‘์„ฑ (#203)

* [BE] refactor: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฉ”์„œ๋“œ ์ œ๊ฑฐ, ์ปจ๋ฒค์…˜ ๋ฐ ์ž‘์€ ๋ฆฌํŒฉํ† ๋ง (#206)

* refactor: date๋ฅผ review๊ฐ€ ์ œ๊ณตํ•˜๋„๋ก ์ˆ˜์ •

* style: ์ปจ๋ฒค์…˜ ์ ์šฉ

* refactor: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฉ”์„œ๋“œ ์ œ๊ฑฐ

* refactor: ๋ฉ”์„œ๋“œ๋ช… ํ†ต์ผ

* style: ๋ถˆํ•„์š”ํ•œ ๊ฐœํ–‰ ์ œ๊ฑฐ

* [FE] jest ์‚ฌ์šฉ ์‹œ nodeํ™˜๊ฒฝ ์† msw ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ์™€ ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์˜ค๋ฅ˜  ํ•ด๊ฒฐ (#215)

* ci: dependencies์—์„œ jest ์‚ญ์ œ ๋ฐ ts-jest ์„ค์น˜

* ci: jest์—์„œ ์ ˆ๋Œ€ ๊ฒฝ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก  jest.config.js ์ถ”๊ฐ€

* chore: eslint์ ์šฉ ์ œ์™ธ ํŒŒ์ผ์— jest.config.js, tsconfig.json ์ถ”๊ฐ€

* ci: jest์˜ testEnvioronment๋ฅผ jsdom์œผ๋กœ ์„ค์ •

* fix: jest์—์„œ msw ver2๋ฅผ ๋ชฉ์„œ๋ฒ„๋กœ ์‚ฌ์šฉ ์‹œ ์ƒ๊ธฐ๋Š” ์˜ค๋ฅ˜ ์ˆ˜์ •

1. msw/node ๋ฅผ ์ฝ์ง€ ๋ชปํ•จ
- jest.config.js์˜ testEnvironment ๋นˆ๋ฌธ์ž์—ด

2. ReferentError: TextEnCoder is not defined
- ํ•ด๊ฒฐ : jest.polyfills.js ์ถ”๊ฐ€ ๋ฐ undici ์„ค์น˜

3. ReferenceError: ReadableStream is not defined
- ํ•ด๊ฒฐ : undici ๋‹ค์šด ๊ทธ๋ ˆ์ด๋“œ
undici": "^6.19.5", -> "^5.0.0"

* ci : jest์—์„œ env ํŒŒ์ผ ์ฝ์„ ์ˆ˜ ์žˆ๋„๋ก dotenv ์„ค์น˜ ๋ฐ jest์— ์ ์šฉ

* [FE] ๊ฐœ๋ฐœํ™˜๊ฒฝ๊ณผ ๋นŒ๋“œํ™˜๊ฒฝ์— ๋”ฐ๋ผ msw ์‹คํ–‰ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•˜๋„๋ก msw ์‹คํ–‰ ์กฐ๊ฑด๋ฌธ ๊ฐœ์„   (#221)

* ci: ๋นŒ๋“œ ํŒŒ์ผ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” http-server ํŒจํ‚ค์ง€ ์„ค์น˜ ๋ฐ ์‹คํ–‰ ๋ช…๋ น์–ด ์ถ”๊ฐ€

* fix:๊ฐœ๋ฐœ ํ™˜๊ฒฝ๊ณผ ๋นŒ๋“œ/๋ฐฐํฌ ํ™˜๊ฒฝ์„ ๊ตฌ๋ถ„ํ•ด ๋ชฉ ์„œ๋ฒ„๋ฅผ ์‹คํ–‰ํ•˜๋„๋ก ์กฐ๊ฑด๋ฌธ ๊ฐœ์„ 

* fix: ๋จธ์ง€ ์ถฉ๋Œ ์‹œ yarn.lock ์‚ญ์ œํ•œ ๊ฑฐ ๋ณต๊ตฌ

* [FE] ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€ query ํ›… ๋ถ„๋ฆฌ ๋ฐ HTTP ์š”์ฒญ ํ…Œ์ŠคํŠธ ์ง„ํ–‰  (#216)

* refactor: DetailedPage/index.tsx ๋ฆฌํŒฉํ† ๋ง

- early return๋ฅผ ์‚ฌ์šฉํ•ด ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์„ ๋†’์ž„

* feat: useGetDetailedReview ํ›… ์ƒ์„ฑ ๋ฐ DetailedReviewPageContents์— ์ ์šฉ

* feat: useSearchParamAndQuery ํ›… ์ƒ์„ฑ ๋ฐ DetailedPageContent์— ์ ์šฉ

* refactor: ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€์—์„œ id๋ผ๊ณ  ์‚ฌ์šฉํ–ˆ๋˜ key๊ฐ’, params์˜ key๋ฅผ reviewId๋กœ ๋ณ€๊ฒฝ

- DetailedReview์˜ router param์„ id์—์„œ reviewId๋กœ ๋ณ€๊ฒฝ

* ci: dependencies์—์„œ jest ์‚ญ์ œ ๋ฐ ts-jest ์„ค์น˜

* ci: jest์—์„œ ์ ˆ๋Œ€ ๊ฒฝ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก  jest.config.js ์ถ”๊ฐ€

* chore: eslint์ ์šฉ ์ œ์™ธ ํŒŒ์ผ์— jest.config.js, tsconfig.json ์ถ”๊ฐ€

* ci: jest์˜ testEnvioronment๋ฅผ jsdom์œผ๋กœ ์„ค์ •

* refactor: useGetDetailedReview์—์„œ query ๊ฒฐ๊ณผ๋ฅผ ๋ชจ๋‘ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝ

* fix: jest์—์„œ msw ver2๋ฅผ ๋ชฉ์„œ๋ฒ„๋กœ ์‚ฌ์šฉ ์‹œ ์ƒ๊ธฐ๋Š” ์˜ค๋ฅ˜ ์ˆ˜์ •

1. msw/node ๋ฅผ ์ฝ์ง€ ๋ชปํ•จ
- jest.config.js์˜ testEnvironment ๋นˆ๋ฌธ์ž์—ด

2. ReferentError: TextEnCoder is not defined
- ํ•ด๊ฒฐ : jest.polyfills.js ์ถ”๊ฐ€ ๋ฐ undici ์„ค์น˜

3. ReferenceError: ReadableStream is not defined
- ํ•ด๊ฒฐ : undici ๋‹ค์šด ๊ทธ๋ ˆ์ด๋“œ
undici": "^6.19.5", -> "^5.0.0"

* ci : jest์—์„œ env ํŒŒ์ผ ์ฝ์„ ์ˆ˜ ์žˆ๋„๋ก dotenv ์„ค์น˜ ๋ฐ jest์— ์ ์šฉ

* fix: mock ํ•ธ๋“ค๋Ÿฌ์ธ getDetailedReview ์—์„œ ์ค‘๋ณต๋œ ์ฟผ๋ฆฌ ๋งค๊ฐœ ๋ณ€์ˆ˜ ์‚ฌ์šฉ ์ˆ˜์ •

- ์˜ค๋ฅ˜ ์ƒํ™ฉ:  jest์—์„œ msw ์‚ฌ์šฉ ์‹œ, get์˜ url์— ํŒŒ๋ผ๋ฏธํ„ฐ ์‚ฌ์šฉ ์‹œ ์ค‘๋ณต๋œ ์ฟผ๋ฆฌ ๋งค๊ฐœ ๋ณ€์ˆ˜ ์˜ค๋ฅ˜๊ฐ€ ๋‚จ
- ์˜ค๋ฅ˜ ๋ฉ”์„ธ์ง€ ::Found a redundant usage of query parameters in the request handler
- ํ•ด๊ฒฐ:  ๋ฆฌ๋ทฐ ์ƒ์„ธ๋ณด๊ธฐ ํŽ˜์ด์ง€์˜ reviews๊นŒ์ง€์˜ url ์ƒ์ˆ˜๋ฅผ ๋งŒ๋“ค๊ณ , get์—์„œ๋Š” ์ด ์ƒ์ˆ˜๋ฅผ  ํ™œ์šฉํ•œ ์ •๊ทœํ‘œํ˜„์‹์œผ๋กœ ๋ฆฌ๋ทฐ ์ƒ์„ธ๋ณด๊ธฐ ํŽ˜์ด์ง€๋กœ ์˜ค๋Š” ๋ชจ๋“  ์š”์ฒญ์„ ๊ฐ€๋กœ์ฑŒ ์ˆ˜ ์žˆ๋„๋ก  ํ•จ

* refactor: getWrongDetailedReview ๋ชฉ์„œ๋ฒ„ ํ•ธ๋“ค๋Ÿฌ ๋ฐ ๊ด€๋ จ ์ƒ์ˆ˜ ์‚ญ์ œ

- getDetailedReview์—์„œ request๋ฅผ ๋ถ„์„ํ•ด http์˜ค๋ฅ˜ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•จ

* feat: queryClientWrapper ์ƒ์„ฑ

- queryClientWrapper : msw๋ฅผ ์‚ฌ์šฉํ•œ jest ํ…Œ์ŠคํŠธ์— queryWrapper๋กœ ์‚ฌ์šฉ

* test:๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€ api ์š”์ฒญ ์„ฑ๊ณต์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

* fix: groupAccessCodeAtom์˜ ๊ธฐ๋ณธ๊ฐ’ ์›๋ž˜๋Œ€๋กœ ๋ณต๊ตฌ

* chore:queryClientWrapper ๋„ค์ด๋ฐ ํ‘œ๊ธฐ๋ฒ•์„  ํŒŒ์Šค์นผ ์ผ€์ด์Šค๋กœ ๋ณ€๊ฒฝ

* fix: ๋จธ์ง€ ์ถฉ๋Œ ๋ฐฉ์ง€๋ฅผ ์œ„ํ•ด yarn.lock ์‚ญ์ œ

* fix:  ๋จธ์ง€ ์‹œ yarn.lock ์ถฉ๋Œ ํ•ด๊ฒฐ

* [FE] test: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํŽ˜์ด์ง€์— API ์—ฐ๋™ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€ ๋ฐ ๋ฆฌํŒฉํ† ๋ง (#217)

* chore: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํŽ˜์ด์ง€ ๊ด€๋ จ ์ปดํฌ๋„ŒํŠธ ๋ฐ ์ธํ„ฐํŽ˜์ด์Šค, ํŒŒ์ผ ์ด๋ฆ„ ๋ณ€๊ฒฝ

* refactor: api ์—”๋“œํฌ์ธํŠธ ์ƒ์ˆ˜ ์ ์šฉ

* refactor: useGetReviewList ํ›…์œผ๋กœ ๋ถ„๋ฆฌ

* test: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํŽ˜์ด์ง€ api ์—ฐ๋™ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

* chore: msw ๋ชจํ‚น ์ฝ”๋“œ ์ œ๊ฑฐ

* chore: ๊ฒฝ๋กœ index ์ œ๊ฑฐ

* fix: ์ค‘๋ณต๋œ import ๋ฐ ๋ถˆํ•„์š”ํ•œ ํ•ธ๋“ค๋Ÿฌ ์ œ๊ฑฐ

* chore: ์—”๋“œํฌ์ธํŠธ ์ƒ์ˆ˜ ์ œ๊ฑฐ

* [FE] refactor: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํŽ˜์ด์ง€ ๋ฆฌํŒฉํ† ๋ง (#219)

* refactor: ๊ฐ ๋ชจ๋‹ฌ๋ณ„๋กœ ์ƒํƒœ์™€ ๋™์ž‘์„ ๊ด€๋ฆฌํ•˜๋Š” ํ›… ๋ถ„๋ฆฌ

* refactor: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํผ์˜ ๋กœ์ง์„ ํ›…์œผ๋กœ ๋ถ„๋ฆฌ

* refactor: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํŽ˜์ด์ง€์— ๋ถ„๋ฆฌํ•œ ํ›… ์ ์šฉ

* refactor: URL์—์„œ reviewRequestCode๋ฅผ ์ถ”์ถœํ•˜๋Š” ๋กœ์ง์„ ํ›…์œผ๋กœ ๋ถ„๋ฆฌ

* chore: ๋ถˆํ•„์š”ํ•œ ํ…Œ์ŠคํŠธ์šฉ ์ฝ”๋“œ ์ œ๊ฑฐ

* chore: ErrorModal์„ ๋‹ซ์„ ๋•Œ errorMessage ์ƒํƒœ๋„ ์ดˆ๊ธฐ๊ฐ’์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋„๋ก ์ˆ˜์ •

* [BE] feat: ํ—ค๋” ์กด์žฌ ์—ฌ๋ถ€ ๊ฒ€์ฆ (#207)

* fix: ์ธํ„ฐํŽ˜์ด์Šค์™€ ๊ตฌํ˜„์ฒด ์–ด๋…ธํ…Œ์ด์…˜ ์ผ์น˜

* feat: ํ—ค๋” ๊ฒ€์‚ฌ ์–ด๋…ธํ…Œ์ด์…˜

* feat: ํ—ค๋” ๋ฐธ๋ฆฌ๋ฐ์ดํ„ฐ

* feat: ์ปจํŠธ๋กค๋Ÿฌ์— ํ—ค๋” ๊ฒ€์‚ฌ

* feat: ํ—ค๋” ๊ฒ€์ฆ ๋ฉ”์‹œ์ง€ ํด๋ผ์ด์–ธํŠธ์— ์ „๋‹ฌ

* fix: ๋ˆ„๋ฝ๋œ `@Valid` ์–ด๋…ธํ…Œ์ด์…˜ ์ถ”๊ฐ€

* refactor: ์š”์ฒญ์ด null์ธ ๊ฒฝ์šฐ ํ•ธ๋“ค๋ง

* chore: ํ…Œ์ŠคํŠธ ์ด๋ฆ„ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ๋ณ€๊ฒฝ

* chore: ์†Œ๋ฌธ์ž ์ปจ๋ฒค์…˜

* feat: ArgumentResolver๋ฅผ ํ™œ์šฉํ•œ ํ—ค๋” ๊ฒ€์ฆ

* feat: ๊ณต์šฉ ํŒจํ‚ค์ง€๋กœ ์ด๋™ ๋ฐ ๋ฒ”์šฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ˆ˜์ •

* chore: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” import ์ œ๊ฑฐ

* feat: ArgumentResolver ์ ์šฉ, Validator ์‚ญ์ œ

* chore: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ปค์Šคํ…€ ์˜ˆ์™ธ ์›๋ณต

* refactor: ํ—ค๋” ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ๋ฉ”์‹œ์ง€ ์ˆ˜์ •

* chore: ๋ถˆํ•„์š”ํ•œ `@Valid` ์–ด๋…ธํ…Œ์ด์…˜ ์‚ญ์ œ

* refactor: ๋ณ€์ˆ˜ ์ถ”์ถœ

Co-authored-by: Yeongseo Na <[email protected]>

* fix: ์ปดํŒŒ์ผ ์—๋Ÿฌ ํ•ด๊ฒฐ

---------

Co-authored-by: Yeongseo Na <[email protected]>

* ci: index.html์— ๊ตฌ๊ธ€ ์• ๋„๋ฆฌํ‹ฑ์Šค ์ ์šฉ (#226)

* [FE] ci: sentry ์ดˆ๊ธฐ ์„ค์ • (#223)

* ci: sentry ์ดˆ๊ธฐ ์„ค์ •

* chore: gitignore์— env.sentry-build-plugin ์ถ”๊ฐ€

* ci: sentry ์ ์šฉ ํ”„๋กœ์ ํŠธ๋ฅผ woowacoure-review-me๋กœ ๋ณ€๊ฒฝ, ๋กœ์ปฌ ํ™˜๊ฒฝ ์ถ”์ ํ•˜๋„๋ก ๋ณ€๊ฒฝ

* ci: sentry ์ ์šฉ ํ™˜๊ฒฝ์„ ๋ฐฐํฌ ํ™˜๊ฒฝ์œผ๋กœ ๋‹ค์‹œ ๋ณ€๊ฒฝ

* ci: sentry์—์„œ replay ๊ด€๋ จ ์„ค์ • ์‚ญ์ œ

---------

Co-authored-by: badahertz52 <[email protected]>

* [FE] refactor: LandingPage์— ๋ฆฌ์•กํŠธ ์ฟผ๋ฆฌ ์ ์šฉ ๋ฐ ๋ฆฌํŒฉํ† ๋ง (#218)

* chore: LandingPage์˜ styles ํŒŒ์ผ ๋ถ„๋ฆฌ

* fix: POST ์š”์ฒญ์„ ํ•˜๋Š” ํ•จ์ˆ˜์˜ ์ด๋ฆ„์„ post~๋กœ ์ˆ˜์ •

* feat: ๊ทธ๋ฃน ๋ฐ์ดํ„ฐ ์ƒ์„ฑ ์š”์ฒญ์— ๋Œ€ํ•œ MSW ํ•ธ๋“ค๋Ÿฌ ์ถ”๊ฐ€

* refactor: ๋ชจํ‚น ๋ฐ์ดํ„ฐ ๊ฐ’์„ ๋” ์ง๊ด€์ ์œผ๋กœ ์ˆ˜์ •

* refactor: LandingPage๋ฅผ ErrorSuspenseContainer๊ฐ€ ๊ฐ์‹ธ๋„๋ก ์ˆ˜์ •

* refactor: URL์„ ์–ป์–ด์˜ค๋Š” API์— react-query ์ ์šฉ ๋ฐ API ํ˜ธ์ถœ ํ•จ์ˆ˜ ์ด๋ฆ„ ์ˆ˜์ •

* chore: LandingPage ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ๋“ค์˜ index ํŒŒ์ผ ์ถ”๊ฐ€ ๋ฐ ์ ์šฉ

* refactor: groupAccessCode ๊ด€๋ จ msw ํ•ธ๋“ค๋Ÿฌ ์ถ”๊ฐ€ ๋ฐ ์—๋Ÿฌ ์ƒํƒœ(์—†๋Š” ์ฝ”๋“œ ์ž…๋ ฅ, ์„œ๋ฒ„ ์—๋Ÿฌ)์— ๋”ฐ๋ฅธ ์—๋Ÿฌ ๋ฉ”์„ธ์ง€๋ฅผ ์ถœ๋ ฅํ•˜๋„๋ก ์ˆ˜์ •

* refactor: groupAccessCode์— ์•ŒํŒŒ๋ฒณ ๋Œ€์†Œ๋ฌธ์ž์™€ ์ˆซ์ž๋งŒ ์˜ฌ ์ˆ˜ ์žˆ๋„๋ก ์ˆ˜์ •

* refactor: LandingPage์—์„œ ErrorSuspenseContainer๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ๋Œ€์‹  URLGeneratorForm๋งŒ์„ ๊ฐ์‹ธ๋„๋ก ์ˆ˜์ •

* refactor: Input ์ปดํฌ๋„ŒํŠธ์˜ onChange ์ด๋ฒคํŠธ ํƒ€์ž… ์ˆ˜์ •

* refactor: Input ์ปดํฌ๋„ŒํŠธ์— name ์†์„ฑ ์ถ”๊ฐ€

* refactor: ์ˆ˜์ •๋œ ๊ฒฝ๋กœ ๋ฐ˜์˜

* refactor: usePostDataForUrl ์ฟผ๋ฆฌ์—์„œ mutation์„ ๋ฆฌํ„ดํ•˜๋„๋ก ์ˆ˜์ •

* refactor: URL์„ ์„ฑ๊ณต์ ์œผ๋กœ ์ƒ์„ฑํ•œ ์ดํ›„ Input์„ ๋ฆฌ์…‹ํ•˜๋Š” ํ•จ์ˆ˜ ์ถ”๊ฐ€

* chore: NOTE ์ฃผ์„ ์ถ”๊ฐ€

* refactor: getIsValidGroupAccessCodeApi์—์„œ 400 ์™ธ์˜ ์—๋Ÿฌ ์ฒ˜๋ฆฌ๋ฅผ ๊ธฐ์กด์˜ createApiErrorMessage๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์ˆ˜์ •

* chore: ๋ˆ„๋ฝ๋๋˜ -Api suffix ๋ฐ˜์˜

* [BE] Actuator ์ ์šฉ๊ณผ logback ์„ค์ • (#228)

* build: actuator ์˜์กด์„ฑ ์ถ”๊ฐ€

* feat: ๋กœ๊ทธ๋ฐฑ ์„ค์ •

* feat: submodule ์ ์šฉ

- actuator ์„ค์ •์„ ์„œ๋ธŒ ๋ชจ๋“ˆ์— ์ €์žฅ

* style: ๊ฐœํ–‰ ๋ฐ ์ฃผ์„ ์ œ๊ฑฐ

* test: logback ์„ค์ • ์ถ”๊ฐ€

* [FE] CD test (#233)

* ci: sentry ์ดˆ๊ธฐ ์„ค์ •

* chore: ์„œ๋น„์Šค ํƒ€์ดํ‹€ ๋Œ€๋ฌธ์ž๋กœ ๋ณ€๊ฒฝ

* chore: merge

* [BE] ํ”„๋กœํŒŒ์ผ ๋ถ„๋ฆฌ, CD ์Šคํฌ๋ฆฝํŠธ ์ˆ˜์ • (#235)

* feat: ํ”„๋กœํŒŒ์ผ ๋ถ„๋ฆฌ

* feat: ํ”„๋กœํŒŒ์ผ ๋ถ„๋ฆฌ

* cd: ํ”„๋กœํŒŒ์ผ ๋ถ„๋ฆฌ cd ์Šคํฌ๋ฆฝํŠธ ์ˆ˜์ •

* fix: CD ์Šคํฌ๋ฆฝํŠธ ์˜คํƒ€ ์ˆ˜์ • (#236)

* [FE] CD test 2 (#237)

* ci: sentry ์ดˆ๊ธฐ ์„ค์ •

* chore: ์„œ๋น„์Šค ํƒ€์ดํ‹€ ๋Œ€๋ฌธ์ž๋กœ ๋ณ€๊ฒฝ

* chore: merge

* fix: sentry ์žฌ์„ค์ •

* fix: sentry ์„ค์ • ๋ณต๊ตฌ

* fix: cd ์Šคํฌ๋ฆฝํŠธ ์˜คํƒ€ ์ˆ˜์ • (#238)

* [FE] CD TEST 3 (#239)

* ci: sentry ์ดˆ๊ธฐ ์„ค์ •

* chore: ์„œ๋น„์Šค ํƒ€์ดํ‹€ ๋Œ€๋ฌธ์ž๋กœ ๋ณ€๊ฒฝ

* chore: merge

* fix: sentry ์žฌ์„ค์ •

* fix: sentry ์„ค์ • ๋ณต๊ตฌ

* chore: ์„œ๋น„์Šค ํƒ€์ดํ‹€ ๋ณ€๊ฒฝ

* [BE] build: Micrometer ์˜์กด์„ฑ ์ถ”๊ฐ€ (#244)

* build: ๋งˆ์ดํฌ๋กœ๋ฏธํ„ฐ ์˜์กด์„ฑ ์ถ”๊ฐ€

Co-authored-by: hyeonjilee <[email protected]>
Co-authored-by: nayonsoso <[email protected]>

* chore: ์„œ๋ธŒ๋ชจ๋“ˆ ์—…๋ฐ์ดํŠธ

Co-authored-by: hyeonjilee <[email protected]>
Co-authored-by: nayonsoso <[email protected]>

---------

Co-authored-by: hyeonjilee <[email protected]>
Co-authored-by: nayonsoso <[email protected]>

* [FE] feat: ๊ณตํ†ต ์ปดํฌ๋„ŒํŠธ์ธ ์ฒดํฌ๋ฐ•์Šค์™€ ์ฒดํฌ๋ฐ•์Šค ์•„์ดํ…œ ์ œ์ž‘ (#240)

* feat: ๊ณตํ†ต ์ฒดํฌ๋ฐ•์Šค ์ปดํฌ๋„ŒํŠธ ์ž‘์„ฑ

* feat: ์ฒดํฌ๋ฐ•์Šค์— ๋ ˆ์ด๋ธ”์„ ๋‹ฌ ์ˆ˜ ์žˆ๋Š” CheckboxItem ์ปดํฌ๋„ŒํŠธ ์ž‘์„ฑ

* fix: style์„ ์ž˜๋ชป ์ „๋‹ฌํ•˜๋˜ ๋ฌธ์ œ ํ•ด๊ฒฐ

* [BE] fix: CD ์Šคํฌ๋ฆฝํŠธ ์ˆ˜์ • (#246)

* fix: CD ์Šคํฌ๋ฆฝํŠธ ์ˆ˜์ •

* chore: ์ €์žฅ ๋ฐ์ดํ„ฐ dev์—์„œ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ˆ˜์ •

* [FE] refactor: LandingPage ๊ฒฝ๋กœ ๋ณ€๊ฒฝ (#249)

* refactor: LandingPage์˜ ๊ฒฝ๋กœ ๋ณ€๊ฒฝ

* refactor: App ์—์„œ ์‚ฌ์ด๋“œ๋ฐ” ์ฃผ์„ ์ฒ˜๋ฆฌ

* [BE] Swagger API ๋ฌธ์„œ ์—…๋ฐ์ดํŠธ (#254)

* docs: ๋ฆฌ๋ทฐ api ๋ฌธ์„œ๋ฅผ ์œ„ํ•œ swagger ์–ด๋…ธํ…Œ์ด์…˜ ์ถ”๊ฐ€

* refactor: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” dto ์‚ญ์ œ

* docs: api ๋ฌธ์„œ์— ์ตœ์†Œ ๋ฐ ์ตœ๋Œ€ ์„ค์ • ์•ˆ๋‚ด ์ถ”๊ฐ€

* docs: ๋ฆฌ๋ทฐ ๊ทธ๋ฃน api๋ฅผ ์œ„ํ•œ swagger ์–ด๋…ธํ…Œ์ด์…˜ ์ถ”๊ฐ€

* refactor: Spring์—์„œ ์ œ๊ณตํ•˜๋Š” APPLICATION_JSON_VALUE ์‚ฌ์šฉ

* [BE] feat: ์˜ˆ์™ธ์— ๋Œ€ํ•œ ๋กœ๊ทธ ์ž‘์„ฑ (#255)

* feat: Controller advice ์— ๋กœ๊น… ์ถ”๊ฐ€

* refactor: ์Šคํƒ ํŠธ๋ ˆ์ด์Šค ๋กœ๊น… ์ถ”๊ฐ€

* feat: ๋ฆฌ๋ทฐ๊ทธ๋ฃน ์ƒ์„ฑ์‹œ ๊ธธ์ด ๊ฒ€์ฆ ๋กœ๊น… ์ถ”๊ฐ€

* feat: ๋‹ต๋ณ€ ๊ธธ์ด ๊ฒ€์ฆ ๋กœ๊น… ์ถ”๊ฐ€

* feat: ๋ฆฌ๋ทฐ ๊ทธ๋ฃน ์ฝ”๋“œ ๊ฒ€์ฆ ๊ฒ€์ฆ ๋กœ๊น… ์ถ”๊ฐ€

* feat: ๋ฆฌ๋ทฐ ์กฐํšŒ ๊ฒ€์ฆ ๊ฒ€์ฆ ๋กœ๊น… ์ถ”๊ฐ€

* feat: ์„ ํƒ๋œ ํ‚ค์›Œ๋“œ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒ€์ฆ ๋กœ๊น… ์ถ”๊ฐ€

* feat: ์ค‘๋ณต ์„ ํƒ๋œ ํ‚ค์›Œ๋“œ ๊ฒ€์ฆ ๋กœ๊น… ์ถ”๊ฐ€

* feat: ํ‚ค์›Œ๋“œ ์กฐํšŒ ๊ฒ€์ฆ ๋กœ๊น… ์ถ”๊ฐ€

* feat: ์„ ํƒ ํ‚ค์›Œ๋“œ ๊ฐฏ์ˆ˜ ๊ฒ€์ฆ ๋กœ๊น… ์ถ”๊ฐ€

* feat: ์„ ํƒ๋œ ์งˆ๋ฌธ ์ค‘๋ณต ๊ฒ€์ฆ ๋กœ๊น… ์ถ”๊ฐ€

* feat: ์งˆ๋ฌธ ์กฐํšŒ ๊ฒ€์ฆ ๋กœ๊น… ์ถ”๊ฐ€

* feat: ์ค‘๋ณต ์งˆ๋ฌธ ๊ฒ€์ฆ ๋กœ๊น… ์ถ”๊ฐ€

* feat: ์Šคํ”„๋ง ๋ฐœ์ƒ ์˜ˆ์™ธ ๋กœ๊น…์— ๋ฉ”์„ธ์ง€ ์ถ”๊ฐ€

* feat: ์ธ์ฝ”๋”ฉ ์„ค์ •

* style: ๊ฐœํ–‰ ์ˆ˜์ •

Co-authored-by: Donghoon Lee <[email protected]>

* style: ๊ฐœํ–‰ ๋ฐ ๊ณต๋ฐฑ ์ˆ˜์ •

* refactor: ๋ถˆํ•„์š”ํ•œ ๊ฒ€์ฆ ์ œ๊ฑฐ

- ์„ ํƒ๋œ ํ‚ค์›Œ๋“œ์™€ ์งˆ๋ฌธ์ด DB์— ์žˆ๋Š”์ง€๋ฅผ validator ์—์„œ ๊ฒ€์ฆํ•œ ํ›„์—๋„, repository.getById ๋ฅผ ํ•  ๋•Œ ํ•œ๋ฒˆ ๋” ๊ฒ€์ฆ์ด ๋“ค์–ด๊ฐ„๋‹ค. ๋”ฐ๋ผ์„œ 'DB์— ์žˆ๋Š”์ง€'์— ๋Œ€ํ•œ ๊ฒ€์ฆ์„ validator ์—์„œ ํ•  ํ•„์š”๋Š” ์—†๋‹ค๋Š” ํŒ๋‹จ ํ•˜์— ํ•ด๋‹น ๋กœ์ง์„ ์‚ญ์ œํ•œ๋‹ค.

---------

Co-authored-by: Donghoon Lee <[email protected]>

* [FE] refactor:  Textarea๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ณตํ†ต ์žฅ๋ฌธํ˜• ๋‹ต๋ณ€ ์ž…๋ ฅ ์ปดํฌ๋„ŒํŠธ ๋ถ„๋ฆฌ (#252)

* feat: ๊ณตํ†ต textarea ์ปดํฌ๋„ŒํŠธ ์ž‘์„ฑ

* refactor: longReviewItem์˜ ๋กœ์ง์„ ์ปค์Šคํ…€ ํ›…์œผ๋กœ ๋ถ„๋ฆฌ

* refactor: longReviewItem์œผ๋กœ ์ด๋ฆ„ ๋ณ€๊ฒฝ ๋ฐ ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„

* chore: ๊ธฐ์กด์˜ ReviewItem ์ œ๊ฑฐ ๋ฐ ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํŽ˜์ด์ง€์— LongReviewItem ์ ์šฉ

* [FE] refactor: ๊ณต์šฉ ๋ชจ๋‹ฌ ํ›… ์ถ”๊ฐ€ ๋ฐ LongReviewItem ๋ฆฌํŒฉํ† ๋ง (#258)

* feat: ๋ชจ๋‹ฌ ์ƒํƒœ ๊ด€๋ฆฌ ํ›… ์ถ”๊ฐ€

* refactor: LongReviewItem ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์™ธ๋ถ€์˜ event๋ฅผ props๋กœ ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก ๋ณ€๊ฒฝ

* [FE] test: LandingPage์—์„œ ์‚ฌ์šฉํ•˜๋Š” API์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ (#251)

* chore: ๋ถˆํ•„์š”ํ•œ Fragment ์ œ๊ฑฐ

* test: LandingPage์—์„œ ์‚ฌ์šฉํ•˜๋Š” api ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

* [FE] refactor: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํŽ˜์ด์ง€์— react query๋ฅผ ์ ์šฉํ•˜๊ณ  API ์—ฐ๋™ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ (#256)

* refactor: ๋ฆฌ๋ทฐ ์ž‘์„ฑ์„ ์œ„ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๋กœ์ง์— react query ์ ์šฉ

* refactor: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํ›„ ๊ฒŒ์‹œ ์š”์ฒญ ๋กœ์ง์— useMutation ์ ์šฉ

* refactor: query key ์ƒ์ˆ˜ํ™” ๋ฐ ๋ฆฌ๋ทฐ ์ž‘์„ฑ์„ ์œ„ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๋กœ์ง์„ useReviewForm์—์„œ ์ œ๊ฑฐ

* chore: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํŽ˜์ด์ง€์— ErrorSuspenseContainer ์ ์šฉ

* chore: styled component๋ช… ์ˆ˜์ •

* chore: ๋ฆฌ๋ทฐ ์ž‘์„ฑ์„ ์œ„ํ•œ mock data๋ฅผ ๋ณ€๊ฒฝ๋œ api ํ˜•์‹์— ๋งž๊ฒŒ ์ˆ˜์ •

* chore: useGetDataToWrite๊ฐ€ ๋” ๋งŽ์€ ๋ฐ˜ํ™˜๊ฐ’์„ ์ œ๊ณตํ•˜๋„๋ก ์ˆ˜์ •

* test: useGetDataToWrite์˜ API ์š”์ฒญ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ

* chore: dataToWrite๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ ์ƒํƒœ ๊ธฐ๋ณธ๊ฐ’ ์ง€์ •

* chore: msw๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฆฌ๋ทฐ ์ƒ์„ฑ post ์š”์ฒญ mocking

* chore: ๋ฆฌ๋ทฐ ์ •๋ณด mocking data ์ƒ์„ฑ

* chore: useMutationReview๊ฐ€ UseMutationResult ํƒ€์ž… ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ์„ค์ •

* test: useMutateReview์˜ API ์š”์ฒญ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ

* chore: useGetDataToWrite์˜ ๋ฐ˜ํ™˜๊ฐ’์„ ๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ˆ˜์ •

* chore: LongReviewItem ์ปดํฌ๋„ŒํŠธ ์ ์šฉ

* [FE] fix: ์งˆ๋ฌธ ๋ฒˆํ˜ธ๊ฐ€ ์ž˜๋ชป ์ถœ๋ ฅ๋˜๋Š” ์˜ค๋ฅ˜ ๋ฐ ๋ฆฌ๋ทฐ ์ž‘์„ฑ ์™„๋ฃŒ ์‹œ ์ž˜๋ชป๋œ ๊ฒฝ๋กœ๋กœ ์ด๋™ํ•˜๋Š” ์˜ค๋ฅ˜ ์ˆ˜์ • (#265)

* fix: ์งˆ๋ฌธ ๋ฒˆํ˜ธ๊ฐ€ ์ž˜๋ชป ์ถœ๋ ฅ๋˜๋Š” ์˜ค๋ฅ˜ ์ˆ˜์ •

* fix: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ์™„๋ฃŒ ์‹œ ์ž˜๋ชป๋œ ๊ฒฝ๋กœ๋กœ ์ด๋™๋˜๋Š” ๋ฌธ์ œ ์ˆ˜์ •

* [BE] feat: ์งˆ๋ฌธ ๋ฆฌ๋ทฐ์ด ์ด๋ฆ„์œผ๋กœ ์น˜ํ™˜ (#262)

* chore: cd ํ…Œ์ŠคํŠธ ํ™•์ธ ์ฝ”๋“œ ์ž‘์„ฑ (#272)

* fix: ์ƒ์„ธ ๋‚ด์šฉ ํ‘œ์‹œํ•  ๋•Œ ๋ฆฌ๋ทฐ์ด ์ด๋ฆ„ ์น˜ํ™˜ (#270)

* [FE] feat: ํด๋ฆฝ๋ณด๋“œ ๋ณต์‚ฌ ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„ (#261)

* feat: ํด๋ฆฝ๋ณด๋“œ ๋ณต์‚ฌ ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„

Co-authored-by: skylar1220 <[email protected]>

* fix: ๋ถ€๋ชจ ์š”์†Œ์˜ ๋„ˆ๋น„์— ๋”ฐ๋ผ CopyTextButton์ด ์ž‘์•„์ง€๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ

* refactor: ReviewGroupDataModal ์Šคํƒ€์ผ ์กฐ์ • - ์ „์ฒด ํฌ๊ธฐ ์ง€์ • ๋ฐ gap ์กฐ์ •

* chore: ๋ถˆํ•„์š”ํ•œ padding ์ œ๊ฑฐ

* chore: index ํŒŒ์ผ์— CopyTextButton ์ถ”๊ฐ€

---------

Co-authored-by: skylar1220 <[email protected]>

* [FE] chore: front_deploy๋ฅผ develop์— ๋ฐ˜์˜ (#276)

* [FE] feat: ์งˆ๋ฌธ ์ž‘์„ฑ ํŽ˜์ด์ง€ QuestionCard, ReviewWritingCard ๊ณตํ†ต ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ค๊ณ , ์Šฌ๋ผ์ด๋” ๋ฐฉ์‹์˜ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ (#247)

* chore: .gitignore์—์„œ ์ฃผ์„ ์ œ๊ฑฐ

* feat: QuestionCard ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„

* feat: ReviewWritingCard ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„

* style: CSS ์†์„ฑ ์ˆœ์„œ ์ •๋ ฌ

* refactor: ์ œ๋ชฉ๊ณผ ๋‚ด์šฉ์„ ๊ฐ๊ฐ Header์™€ Main ์„น์…˜์œผ๋กœ ๋ถ„๋ฆฌ

* feat: ์Šฌ๋ผ์ด๋” ๋ฐฉ์‹์œผ๋กœ ์งˆ๋ฌธ ์นด๋“œ๊ฐ€ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ „ํ™˜๋˜๋Š” ๊ธฐ๋Šฅ ์ถ”๊ฐ€

* design: pretendard ํฐํŠธ ์ ์šฉ

* chore: ํ—ค๋” review me ๋Œ€๋ฌธ์ž๋กœ ๋ณ€๊ฒฝ

* refactor: QuestionCard, ReviewWritingCard ํด๋” ์œ„์น˜ ๋ณ€๊ฒฝ

- ReviewWritingFormPage์˜ components๋กœ ์ด๋™

* [FE] ์งˆ๋ฌธ ์ž‘์ • ํŽ˜์ด์ง€์— ํ•„์š”ํ•œ ์งˆ๋ฌธ ๋ชฉ ๋ฐ์ดํ„ฐ ๋ฐ ์นด๋“œ์˜ ์ƒํƒœ ์ฒ˜๋ฆฌ (#263)

* [BE] fix: CD ์Šคํฌ๋ฆฝํŠธ ์ˆ˜์ • (#246)

* fix: CD ์Šคํฌ๋ฆฝํŠธ ์ˆ˜์ •

* chore: ์ €์žฅ ๋ฐ์ดํ„ฐ dev์—์„œ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ˆ˜์ •

* [FE] refactor: Landiโ€ฆ
donghoony added a commit that referenced this pull request Aug 21, 2024
* [All] ์šด์˜ ์„œ๋ฒ„ ๋ฐฐํฌ (v1.0.0) (#509)

* [FE] ํ”„๋ก ํŠธ์—”๋“œ ์ดˆ๊ธฐ ์„ธํŒ… (#5)

* ci: webpack, react, typescript ์„ค์ •

* ci: eslint, prettier, stylelint ์„ค์ •

* [BE] feat: ์ดˆ๊ธฐ ํ™˜๊ฒฝ ์„ค์ • (#8)

* feat: ์ดˆ๊ธฐ ํ™˜๊ฒฝ ์„ค์ •

* refactor: ํด๋ž˜์Šค ์ข…๋ฃŒ ์ „ ๊ฐœํ–‰ ์ œ๊ฑฐ

* build: application.yml ์„ค์ •

* [BE] feat: ์ดˆ๊ธฐ ์—”ํ‹ฐํ‹ฐ ์ž‘์„ฑ (#10)

* feat: ์ดˆ๊ธฐ ์—”ํ‹ฐํ‹ฐ ์ž‘์„ฑ

* refactor: ๋ฆฌ๋ทฐ ๋‚ด์šฉ๊ณผ ๋ฆฌ๋ทฐ๋ฅผ ๋‹ค๋Œ€์ผ ์—ฐ๊ฒฐ

* refactor: ํŒจํ‚ค์ง€ ๊ตฌ์กฐ ๊ณ ๋ คํ•˜์—ฌ ProjectGroup์œผ๋กœ ์ˆ˜์ •

* refactor: Project -> Reviewer๋กœ ๋ณ€๊ฒฝ

* refactor: ํ…Œ์ด๋ธ”๋ช… ์ผ์น˜ (reviewer_group)

* [BE] feat: ๋ฆฌ๋ทฐ ์ž‘์„ฑ (#15)

* feat: ์ดˆ๊ธฐ ์—”ํ‹ฐํ‹ฐ ์ž‘์„ฑ

* refactor: ๋ฆฌ๋ทฐ ๋‚ด์šฉ๊ณผ ๋ฆฌ๋ทฐ๋ฅผ ๋‹ค๋Œ€์ผ ์—ฐ๊ฒฐ

* refactor: ํŒจํ‚ค์ง€ ๊ตฌ์กฐ ๊ณ ๋ คํ•˜์—ฌ ProjectGroup์œผ๋กœ ์ˆ˜์ •

* refactor: Project -> Reviewer๋กœ ๋ณ€๊ฒฝ

* refactor: ํ…Œ์ด๋ธ”๋ช… ์ผ์น˜ (reviewer_group)

* feat: ๋ฉค๋ฒ„ ๋ ˆํฌ์ง€ํ† ๋ฆฌ ์ƒ์„ฑ

* feat: ๋ฆฌ๋ทฐ์–ด๊ทธ๋ฃน ๋ ˆํฌ์ง€ํ† ๋ฆฌ ์ƒ์„ฑ

* feat: ๋ฆฌ๋ทฐ ๋ฌธํ•ญ ๋ ˆํฌ์ง€ํ† ๋ฆฌ ์ƒ์„ฑ

* feat: ํ‚ค์›Œ๋“œ ๋ ˆํฌ์ง€ํ† ๋ฆฌ ์ƒ์„ฑ

* feat: ๋ฆฌ๋ทฐ ํ‚ค์›Œ๋“œ ๋ ˆํฌ์ง€ํ† ๋ฆฌ ์ƒ์„ฑ

* feat: ๋ฆฌ๋ทฐ ๋ ˆํฌ์ง€ํ† ๋ฆฌ ์ƒ์„ฑ

* feat: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ๊ธฐ๋Šฅ ๊ตฌํ˜„

* test: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ๊ธฐ๋Šฅ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

---------

Co-authored-by: donghoony <[email protected]>
Co-authored-by: nayonsoso <[email protected]>

* [BE] feat: ํ…Œ์ŠคํŠธ ๋ฉ”์„œ๋“œ๋ณ„ ๊ฒฉ๋ฆฌ (#19)

* feat: ํ…Œ์ŠคํŠธ ๊ฒฉ๋ฆฌ๋ฅผ ์œ„ํ•œ DB Cleaner ๋ฐ Extension ๊ตฌํ˜„

* feat: Service์—์„œ ๊ณตํ†ต์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์–ด๋…ธํ…Œ์ด์…˜ ์ œ๊ณต

* test: ์„œ๋น„์Šค ํ…Œ์ŠคํŠธ ์–ด๋…ธํ…Œ์ด์…˜ ์‚ฌ์šฉํ•˜๋„๋ก ์ˆ˜์ •

* fix: ๋ˆ„๋ฝ๋œ ๋ฆฌ๋ทฐ ์ž‘์„ฑ ๋งคํ•‘ URL ์ถ”๊ฐ€ (#17)

* [BE] feat: ๋ฆฌ๋ทฐ ์กฐํšŒ (#22)

* feat: ๋ฆฌ๋ทฐ ์กฐํšŒ ๊ธฐ๋Šฅ ์ถ”๊ฐ€

* style: ๊ฐœํ–‰ ๋ณ€๊ฒฝ

* test: ๋ฆฌ๋ทฐ ์กฐํšŒ ๊ธฐ๋Šฅ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

* refactor: ๋ฆฌ๋ทฐ ์กฐํšŒ ๋ฉ”์„œ๋“œ๋ช… ๋ณ€๊ฒฝ

* refactor: id ํƒ€์ž… ๋ณ€๊ฒฝ

* style: ๊ฐœํ–‰ ์ˆ˜์ •

* fix: PostMapping ์ˆ˜์ •

---------

Co-authored-by: KIMGYUTAE <[email protected]>
Co-authored-by: donghoony <[email protected]>

* [BE] feat: ์ปค์Šคํ…€ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ (#20)

* feat: ์ปค์Šคํ…€ ์˜ˆ์™ธ ์ƒ์„ฑ

* feat: ์ปค์Šคํ…€ ์˜ˆ์™ธ ์ ์šฉ

* feat: ๊ธ€๋กœ๋ฒŒ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ

* [BE] feat: ๋ฆฌ๋ทฐ์–ด ๊ทธ๋ฃน ์ •๋ณด ๋ฐ ํ‚ค์›Œ๋“œ ์กฐํšŒ API (#24)

* feat: ํ‚ค์›Œ๋“œ ์กฐํšŒ API

* feat: ๋ฆฌ๋ทฐ ๊ทธ๋ฃน ์กฐํšŒ API

* refactor: PathVariable ๋ณ€์ˆ˜๋ช… ๋ณ€๊ฒฝ

* [FE] ๋ฆฌ๋ทฐ ์ž‘์„ฑํ™”๋ฉด๊ณผ ์ƒ์„ธ ๋ฆฌ๋ทฐ ๋ณด๊ธฐ ํ™”๋ฉด ๊ฒฐํ•ฉ (#26)

* fix : webpack dev sever ์—ด ๋•Œ ์˜ค๋ฅ˜ ์ˆ˜์ •

- package.json ์—์„œ type :"module" ์‚ญ์ œ , stylelint ๊ด€๋ จ ์„ค์ • ์‚ญ์ œ

Co-Authored-By: ImxYJL <[email protected]>

* ci : svgํŒŒ์ผ ๊ด€๋ จ ํ™˜๊ฒฝ ์…‹ํŒ…

Co-Authored-By: ImxYJL <[email protected]>

* design : reset ์Šคํƒ€์ผ, global style์—์„œ ํฐํŠธ ์ ์šฉ

Co-Authored-By: ImxYJL <[email protected]>

* feat: ๋ฆฌ๋ทฐ ์ž ๊ธˆ ๋ฒ„ํŠผ ์ถ”๊ฐ€

Co-Authored-By: ImxYJL <[email protected]>

* feat: ์ƒ์„ธ ๋ฆฌ๋ทฐ ๋ณด๊ธฐ ํ™”๋ฉด์˜ ์งˆ๋ฌธ,๋‹ต ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€

Co-Authored-By: ImxYJL <[email protected]>

* feat: ์ƒ์„ธ ๋ฆฌ๋ทฐ ๋ณด๊ธฐ ํ™”๋ฉด์˜ ํ”„๋กœ์ ํŠธ ์„ค๋ช… ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€

Co-Authored-By: ImxYJL <[email protected]>

* feat : ์ƒ์„ธ ๋ฆฌ๋ทฐ ๋ณด๊ธฐ ํ™”๋ฉด ํŽ˜์ด์ง€ ์ถ”๊ฐ€ ๋ฐ ์ƒ์„ธ ๋ฆฌ๋ทฐ ๋ฐ์ดํ„ฐ ํƒ€์ž… ์ถ”๊ฐ€

Co-Authored-By: ImxYJL <[email protected]>

* fix: webpack dev server ์—ด ๋•Œ ์˜ค๋ฅ˜ ์ˆ˜์ •

Co-authored-by: soosoo22 <[email protected]>

* design: reset css ์ ์šฉ

Co-authored-by: soosoo22 <[email protected]>

* feat: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํŽ˜์ด์ง€ ๊ตฌํ˜„

Co-authored-by: soosoo22 <[email protected]>

* ci: svg ํŒŒ์ผ ๊ด€๋ จ ์„ค์ •

* fix : ๋จธ์ง€์ถฉ๋Œ ํ•ด๊ฒฐ ๋ฐ ์˜คํƒ€ ์ˆ˜์ •

* feat: react-router-dom, react-router ์„ค์น˜ ๋ฐ ์„ค์ •

* refactor: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํŽ˜์ด์ง€์™€ ์ƒ์„ธ ๋ฆฌ๋ทฐ ๋ณด๊ธฐ ํŽ˜์ด์ง€ ๊ฒฐํ•ฉ ๋ฐ ๋ฆฌํŒฉํ† ๋ง

* refactor: ๋ฆฌ๋ทฐ ํƒ€์ž… ํŒŒ์ผ ๋ฆฌํŒฉํ† ๋ง ๋ฐ ํƒ€์ž… ์ถ”๊ฐ€

* feat: api ์„ค์ • ์ถ”๊ฐ€ ๋ฐ ์ƒ์„ธ ๋ฆฌ๋ทฐ ๋ณด๊ธฐ ํŽ˜์ด์ง€์— api ํ•ธ๋“ค๋Ÿฌ ์ถ”๊ฐ€

---------

Co-authored-by: ImxYJL <[email protected]>
Co-authored-by: chysis <[email protected]>
Co-authored-by: soosoo22 <[email protected]>

* [BE] refactor: ํŒจํ‚ค์ง€ ๊ตฌ์กฐ ๋ฆฌํŒฉํ„ฐ๋ง (#30)

* refactor: ํŒจํ‚ค์ง€ ๊ตฌ์กฐ ๊ตฌ์ฒดํ™”

* refactor: ํŒจํ‚ค์ง€ ๊ตฌ์กฐ ๊ตฌ์ฒดํ™”(์„œ๋น„์Šค, ์ปจํŠธ๋กค๋Ÿฌ, ๋ ˆํฌ์ง€ํ† ๋ฆฌ)

* [BE] feat: ๋ฆฌ๋ทฐ์–ด ๊ทธ๋ฃน ์„ค๋ช… ์ž‘์„ฑ, ๋งˆ๊ฐ ๊ธฐํ•œ ๋ฐ ๊ฒ€์ฆ ๋กœ์ง ์ถ”๊ฐ€ (#34)

* feat: BadRequestException ์ถ”๊ฐ€

* feat: ๋ฆฌ๋ทฐ์–ด ๊ทธ๋ฃน ์ด๋ฆ„, ์„ค๋ช… ๊ธธ์ด ๊ฒ€์ฆ

* [FE] design: theme ,์ „์—ญ ์Šคํƒ€์ผ์„ ์„ค์ • (#41)

* chore: ๋ถˆํ•„์š”ํ•œ ํŒŒ์ผ ์‚ญ์ œ

Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: soosoo22 <[email protected]>
Co-Authored-By: Fe <[email protected]>

* design: theme ์ƒ์„ฑ

- ์ƒ‰์ƒ, ํฐํŠธ ์‚ฌ์ด์ฆˆ, ํฐํŠธ wieght ์„ค์ •

Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: soosoo22 <[email protected]>
Co-Authored-By: Fe <[email protected]>

* design: emotion ThemeProvider ์ ์šฉ ๋ฐ Theme ํƒ€์ž… ํ™•์žฅ

- emotion์—์„œ ์ œ๊ณตํ•˜๋Š” Theme ํƒ€์ž…์ด ๋นˆ ๊ฐ์ฒด์—ฌ์„œ ์ฝ”๋“œ์—์„œ ์‚ฌ์šฉํ•˜๋Š” theme์— ๋งž๊ฒŒ ํƒ€์ž…์„ ํ™•์žฅํ•จ

Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: soosoo22 <[email protected]>
Co-Authored-By: Fe <[email protected]>

* design : rem ์…‹ํŒ… ๋ฐ reset.css๋ฅผ globalStyle์— ์ ์šฉ

Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: soosoo22 <[email protected]>
Co-Authored-By: Fe <[email protected]>

* chore: App์—์„œ ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ ์‚ญ์ œ

Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: soosoo22 <[email protected]>
Co-Authored-By: Fe <[email protected]>

---------

Co-authored-by: ImxYJL <[email protected]>
Co-authored-by: soosoo22 <[email protected]>
Co-authored-by: Fe <[email protected]>

* [FE] ci: ๋ฆฌ์•กํŠธ ์ฟผ๋ฆฌ ๋ฐ msw ์„ค์น˜, eslint import rule ์ถ”๊ฐ€ ๋ฐ ์ ์šฉ (#44)

* ci: eslint ์˜ค๋ฅ˜ ์ˆ˜์ • ๋ฐ import rule ์ถ”๊ฐ€ ๋ฐ ๊ด€๋ จ ํ”Œ๋Ÿฌ๊ทธ์ธ ์„ค์น˜

- eslint-config-prettier
- eslint-plugin-import

Co-Authored-By: badahertz52 <[email protected]>
Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: Fe <[email protected]>

* style: eslint ์ ์šฉ์œผ๋กœ ์ธํ•œ ์ฝ”๋“œ ํฌ๋งทํŒ… ๋ณ€๊ฒฝ

import ์ˆœ์„œ ์ ์šฉ

Co-Authored-By: badahertz52 <[email protected]>
Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: Fe <[email protected]>

* ci: msw ์„ค์น˜

Co-Authored-By: badahertz52 <[email protected]>
Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: Fe <[email protected]>

---------

Co-authored-by: badahertz52 <[email protected]>
Co-authored-by: ImxYJL <[email protected]>
Co-authored-by: Fe <[email protected]>

* [BE] docs: Swagger๋ฅผ ํ™œ์šฉํ•œ API ๋ฌธ์„œ ์ž๋™ํ™” (#31)

* chore: swagger-ui ์„ค์ • ์ถ”๊ฐ€

* feat: swaggerConfig ์ถ”๊ฐ€

* docs: ์ปจํŠธ๋กค๋Ÿฌ์— swagger ์–ด๋…ธํ…Œ์ด์…˜ ์ถ”๊ฐ€

* docs: dto์— swagger ์–ด๋…ธํ…Œ์ด์…˜ ์ถ”๊ฐ€

* chore: api ๋ฌธ์„œ ์„ค์ • ํŒŒ์ผ ์ถ”๊ฐ€

* refactor: SwaggerConfig info ์„ค์ • ํŒŒ์ผ ๋ณ€์ˆ˜ ์ฐธ์กฐํ•˜๋„๋ก ๋ณ€๊ฒฝ

* docs: api ๋ฌธ์„œ์— ์ƒํƒœ์ฝ”๋“œ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋…ธ์ถœ๋˜๋„๋ก ๋ณ€๊ฒฝ

* chore: api ๋ฌธ์„œ ํŒŒ์ผ๋ช… ๋ณ€๊ฒฝ

* chore: api-docs ํ”„๋กœํผํ‹ฐ๋ช… ๋ณ€๊ฒฝ

* refactor: ํ”„๋กœํผํ‹ฐ ์ •๋ณด์™€ ์„ค์ • ํด๋ž˜์Šค ๋ถ„๋ฆฌ

* refactor: ์ปจํŠธ๋กค๋Ÿฌ ๋‚ด swagger ์–ด๋…ธํ…Œ์ด์…˜ ๋ถ„๋ฆฌ

---------

Co-authored-by: KIMGYUTAE <[email protected]>

* [BE] feat: ๋ฆฌ๋ทฐ ๋„๋ฉ”์ธ ๊ตฌ์ฒดํ™”, ์ •์ฑ… ๊ตฌํ˜„  (#43)

* feat: dto ๊ฒ€์ฆ์„ ์œ„ํ•œ ์˜์กด์„ฑ ์ถ”๊ฐ€

* feat: dto์— jakarta validation ์–ด๋…ธํ…Œ์ด์…˜ ์ถ”๊ฐ€

* feat: ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ์š”์ฒญ์„ ๊ฒ€์ฆํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค์ •

* feat: FieldError ๋‚ด์šฉ์„ ๋ณด์—ฌ์ค„ ์‘๋‹ต ๊ฐ์ฒด ์ƒ์„ฑ

* feat: FieldError ํ•ธ๋“ค๋Ÿฌ ์ถ”๊ฐ€

* refactor: ๋ฌธ์ž์—ด ๊ณต๋ฐฑ ๊ฒ€์ฆ์„ ์œ„ํ•ด NotBlank ์‚ฌ์šฉ

* style: todo ์ฃผ์„ ์ถ”๊ฐ€

* feat: ๋ฐ๋“œ๋ผ์ธ์ด ์ง€๋‚˜๋ฉด ๋ฆฌ๋ทฐ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์—†๋„๋ก ํ•˜๋Š” ๊ธฐ๋Šฅ ์ถ”๊ฐ€

* refactor: ์‚ฌ์ด์ฆˆ ๊ฒ€์ฆ๋ฌธ ์ œ๊ฑฐ

* style: ๊ฐœํ–‰ ๋ณ€๊ฒฝ

* refactor: ์˜ˆ์™ธ ์ด๋ฆ„์„ ๊ณผ๊ฑฐํ˜•์œผ๋กœ ๋ณ€๊ฒฝ

* refactor: RFC 9457 ํ˜•์‹์„ ์ง€ํ‚ค๋ฉด์„œ ํ•„๋“œ ์—๋Ÿฌ ์ •๋ณด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ์ˆ˜์ •

* chore: ์˜คํƒ€ ์ˆ˜์ •

* fix: conflict ํ•ด๊ฒฐ

* feat: dto์— jakarta validation ์–ด๋…ธํ…Œ์ด์…˜ ์ถ”๊ฐ€

* refactor: ๋ฌธ์ž์—ด ๊ณต๋ฐฑ ๊ฒ€์ฆ์„ ์œ„ํ•ด NotBlank ์‚ฌ์šฉ

* refactor: ์‚ฌ์ด์ฆˆ ๊ฒ€์ฆ๋ฌธ ์ œ๊ฑฐ

* [BE] feat: ํ‚ค์›Œ๋“œ ๋„๋ฉ”์ธ ๊ตฌ์ฒดํ™”, ์ •์ฑ… ๊ตฌํ˜„ (#40)

* feat: ํ‚ค์›Œ๋“œ ์ผ๊ธ‰ ์ปฌ๋ ‰์…˜ ๋ฐ ์ œ์•ฝ์‚ฌํ•ญ ๊ตฌํ˜„

* build: ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์—์„œ Lombok ์˜์กด์„ฑ ์ถ”๊ฐ€

* feat: ๋ฆฌ๋ทฐ์— ์ถ”๊ฐ€๋œ ํ‚ค์›Œ๋“œ ์‚ญ์ œ

* feat: ๋ฆฌ๋ทฐ์— ํ‚ค์›Œ๋“œ ์ถ”๊ฐ€

* feat: ์ผ๊ธ‰ ์ปฌ๋ ‰์…˜์˜ ์ด๋ฆ„์„ SelectedKeywords๋กœ ๋ณ€๊ฒฝ

* refactor: ํ‚ค์›Œ๋“œ ๊ฐœ์ˆ˜ ์ •์ฑ… 5๊ฐœ ๋ฐ˜์˜

* refactor: ์ค‘๋ณต ํ‚ค์›Œ๋“œ ๋ฉ˜ํŠธ ์ˆ˜์ •

* refactor: `deleteAll`๋กœ ๋ฉ”์„œ๋“œ๋ช… ์ˆ˜์ •

* refactor: `duplicated` -> `duplicate`๋กœ ์ˆ˜์ •

* refactor: ํ‚ค์›Œ๋“œ ๋™๋“ฑ์„ฑ ๋น„๊ต

* test: ํ‚ค์›Œ๋“œ ๋“ฑ๋ก ์‹œ ๊ธฐ์กด ํ‚ค์›Œ๋“œ ์‚ญ์ œ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ

* refactor: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํ•„๋“œ ์‚ญ์ œ

* style: add newlines between comments

* refactor: ํ‚ค์›Œ๋“œ ID ๊ธฐ๋ฐ˜ ๋น„๊ต

* refactor: id๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ detail ๋น„๊ต

* refactor: ํ‚ค์›Œ๋“œ ํ…Œ์ŠคํŠธ ๋„๋ฉ”์ธ ๊ธฐ๋ฐ˜์œผ๋กœ ์ˆ˜์ •

* [BE] feat: ๋ฆฌ๋ทฐ์–ด ๊ทธ๋ฃน ๋„๋ฉ”์ธ ๊ตฌ์ฒดํ™”, ์ •์ฑ… ๊ตฌํ˜„ (#45)

* feat: Member ์—”ํ‹ฐํ‹ฐ์— GitHub ID ์†์„ฑ ์ถ”๊ฐ€

* feat: ์ž‘์„ฑํ•œ ๋ฆฌ๋ทฐ์–ด๊ฐ€ ๋ฆฌ๋ทฐ์–ด ๊ทธ๋ฃน์— ์†ํ•˜๋Š”์ง€ ๊ฒ€์ฆ

* feat: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ์‹œ, ์ด๋ฏธ ์ž‘์„ฑํ•œ ๋ฆฌ๋ทฐ๊ฐ€ ์žˆ์ง€ ์•Š์€์ง€ ๊ฒ€์ฆ

* refactor: Review ์—”ํ‹ฐํ‹ฐ์˜ reviewer์™€์˜ ์—ฐ๊ด€๊ด€๊ณ„ ManyToOne์œผ๋กœ ๋ณ€๊ฒฝ

* refactor: ์ปฌ๋Ÿผ๋ช… ์˜ค๋ฅ˜ ์ˆ˜์ •

* refactor: gitHub ํ‘œ๊ธฐ -> github์œผ๋กœ ๋ณ€๊ฒฝ

* refactor: GithubReviewGroup -> GithubReviewGroup ํด๋ž˜์Šค๋ช… ๋ณ€๊ฒฝ

* refactor: ๋ˆ„๋ฝ๋œ @Column ์ถ”๊ฐ€

* test: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํ…Œ์ŠคํŠธ ์‹œ, ๊นƒํ—™ ์‚ฌ์šฉ์ž ๊ทธ๋ฃน ๋ฐ์ดํ„ฐ ์ €์žฅ ๋ถ€๋ถ„ ์ถ”๊ฐ€

* refactor: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ์‹œ, ์ค‘๋ณต ๋ฆฌ๋ทฐ ๊ฒ€์ฆ ๋กœ์ง ์ˆ˜์ •

* refactor: GithubReviewerGroupNotFoundException์„ UnAuthorizedException ๊ตฌํ˜„ํ•˜๋„๋ก ์ˆ˜์ •

* refactor: ReviewContentExistException -> ReviewAlreadySubmittedException ํด๋ž˜์Šค๋ช… ๋ณ€๊ฒฝ

* feat: UnAuthorizedException ์ถ”๊ฐ€

* refactor: ๋ฉ”์„œ๋“œ ์ˆœ์„œ ๋ณ€๊ฒฝ

* test: ๋ถˆํ•„์š”ํ•œ given์ ˆ ์‚ญ์ œ

* test: ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ๋ฐ์ดํ„ฐ ์‚ฝ์ž… repository๋ฅผ ํ™œ์šฉํ•˜๋„๋ก ๋ณ€๊ฒฝ

---------

Co-authored-by: Donghoon Lee <[email protected]>

* [FE] ๋ฆฌ๋ทฐ ์“ฐ๊ธฐ ํŽ˜์ด์ง€์— ํ™•์ •๋œ ๋””์ž์ธ์„ ๋ฐ˜์˜ํ•˜๊ณ , ๋ฆฌํŒฉํ„ฐ๋งํ•œ๋‹ค. (#53)

* fix: eslint์—์„œ ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ์ฝ์ง€ ๋ชปํ•˜๋Š” ์˜ค๋ฅ˜ ์ˆ˜์ •

์ ˆ๋Œ€ ๊ฒฝ๋กœ ์ง€์ •

Co-Authored-By: ImxYJL <[email protected]>

* design: ์‹œ์Šคํ…œ ๊ธฐ๋ณธ ํฐํŠธ ํฌ๊ธฐ ์ง€์ •

Co-Authored-By: ImxYJL <[email protected]>

* chore: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” import ์ œ๊ฑฐ

emotion.ts์—์„œ theme ์ œ๊ฑฐ

Co-Authored-By: ImxYJL <[email protected]>

* feat: ๊ณตํ†ต ๋ฒ„ํŠผ ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„

Co-Authored-By: ImxYJL <[email protected]>

* feat: ํ‚ค์›Œ๋“œ ๋ฒ„ํŠผ ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„

Co-Authored-By: ImxYJL <[email protected]>

* feat: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํŽ˜์ด์ง€ ํผ๋ธ”๋ฆฌ์‹ฑ ๋ฐ ์ปดํฌ๋„ŒํŠธ ๋ถ„๋ฆฌ

Co-Authored-By: ImxYJL <[email protected]>

* feat: ๋ฆฌ๋ทฐ์ด ์ฝ”๋ฉ˜ํŠธ ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„

Co-Authored-By: ImxYJL <[email protected]>

* refactor: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํŽ˜์ด์ง€์—์„œ ๋ฆฌ๋ทฐ ์•„์ดํ…œ ์ปดํฌ๋„ŒํŠธ ๋ถ„๋ฆฌ

Co-Authored-By: ImxYJL <[email protected]>

* refactor: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํŽ˜์ด์ง€ ๋ฆฌํŒฉํ„ฐ๋ง

- ๋ฆฌ๋ทฐ์ด ์ฝ”๋ฉ˜ํŠธ ์ถ”๊ฐ€
- ๋ฆฌ๋ทฐ ์•„์ดํ…œ ์ปดํฌ๋„ŒํŠธ ๋ถ„๋ฆฌ
- ๋ถ€๊ฐ€์ ์ธ ์Šคํƒ€์ผ๋ง

Co-Authored-By: ImxYJL <[email protected]>

---------

Co-authored-by: ImxYJL <[email protected]>

* [FE] feat: sidebar  ๋ฆฌํŒฉํ† ๋ง ๋ฐ ๊ธฐ๋Šฅ ์ถ”๊ฐ€  , topbar ์ถ”๊ฐ€, ๋ฐ˜์‘ํ˜• ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ ์ ์šฉ (#55)

* style: globalStyles.ts์—์„œ ๊ฒฝ๋กœ ๊ณต๋ฐฑ ์ถ”๊ฐ€

* docs: ๋ถˆํ•„์š”ํ•œ import ์‚ญ์ œ

Co-Authored-By: soosoo22 <[email protected]>

* design : theme ์ถ”๊ฐ€

- ์ถ”๊ฐ€๋œ theme : breakpoints, sidebarWidth

Co-Authored-By: soosoo22 <[email protected]>

* chore: Header ์ปดํฌ๋„ŒํŠธ ์‚ญ์ œ

Co-Authored-By: soosoo22 <[email protected]>

* feat : Topbar ์ƒ์„ฑ, logo ์ด๋ฏธ์ง€ ๋ณ€๊ฒฝ ๋ฐ SearchInput ์ƒ์„ฑ

- logo ์ด๋ฏธ์ง€ ๋ณ€๊ฒฝ
- Topbar์— ๋“ค์–ด๊ฐ€๋Š” ์ปดํฌ๋„ŒํŠธ๋“ค (SidebarOpenButtion, Logo )์ƒ์„ฑ
- userProfile ์ด๋ฏธ์ง€ ์ƒ์„ฑ
- ๊ณตํ†ต ์ปดํฌ๋„ŒํŠธ : SearchInput ui ์ƒ์„ฑ

Co-Authored-By: soosoo22 <[email protected]>

* feat : ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ ์ƒ์„ฑ

- ๋ ˆ์ด์•„์›ƒ ๊ด€๋ จ ์ปดํฌ๋„ŒํŠธ๋“ค ์ƒ์„ฑ

Co-Authored-By: soosoo22 <[email protected]>

* refactor : App์— ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ ์ ์šฉ

Co-Authored-By: soosoo22 <[email protected]>

* refactor: Sidebar ๋ฆฌํŒฉํ† ๋ง

- ๋ฉ”๋‰ด๋ช… ์ƒ์ˆ˜์ฒ˜๋ฆฌ
- ํ”ผ๊ทธ๋งˆ ๋””์ž์ธ ๋ณ€๊ฒฝ์— ๋”ฐ๋ฅธ ์ˆ˜์ •

Co-Authored-By: soosoo22 <[email protected]>

* feat: sidebar ์—ด๊ณ  ๋‹ซ๋Š” ๊ธฐ๋Šฅ ์ถ”๊ฐ€

Co-Authored-By: soosoo22 <[email protected]>

---------

Co-authored-by: soosoo22 <[email protected]>

* fix: ์ปดํŒŒ์ผ ์—๋Ÿฌ ํ•ด๊ฒฐ (#60)

Co-authored-by: nayonsoso <[email protected]>

* [FE] fix : stylelint ์ ์šฉ ์˜ค๋ฅ˜ ์ˆ˜์ •  (#66)

* fix: stylelint๋ฅผ ํ†ตํ•œ css ์†์„ฑ ์ •๋ ฌ ๊ธฐ๋Šฅ ์˜ค๋ฅ˜ ์ˆ˜์ •

- stylelint ๋ฒ„์ „16๊ณผ ์ถฉ๋Œ๋˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ ์‚ญ์ œ : stylelint-config-prettier, stylelint-prettier
- css ์ •๋ ฌ์— ํ•„์š”ํ•˜์ง€ ์•Š์€ ํ”Œ๋Ÿฌ๊ทธ์ธ ์‚ญ์ œ : stylelint-config-standard, stylelint-config-styled-componented, stylelint-webpack-plugin
- ์ถ”๊ฐ€๋กœ ์„ค์น˜ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ: postcss-syntax, @stylelint/postcss-css-in-js
- stylelint ์ ์šฉ script ์ถ”๊ฐ€
- .stylelintrc.json ์ˆ˜์ • : css ๊ด€๋ จ rule ์„ค์ •

* refactor: stylelint ์ ์šฉ์— ๋”ฐ๋ฅธ css ์†์„ฑ ์ •๋ ฌ

* ci: CI ์Šคํฌ๋ฆฝํŠธ ์ž‘์„ฑ (#70)

* [BE] test: ๊นƒํ—™ ๋ฆฌ๋ทฐ์–ด ๊ทธ๋ฃน์˜ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€ ๋ฐ fixture ๋ฏธ์ ์šฉ ๋ถ€๋ถ„ ๋ณด์™„ (#68)

* test: GithubReviewerGroupRepository ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

* test: ReviewServiceTest์— ํ…Œ์ŠคํŠธ fixture ์ ์šฉ

* test: given, when, then์ ˆ ์ถ”๊ฐ€

* test: given ๋ฐ์ดํ„ฐ ์˜ค๋ฅ˜ ์ˆ˜์ •

* [BE] chore: workflow ๋””๋ ‰ํ„ฐ๋ฆฌ ์ด๋™ (#74)

* chore: workflow ๋””๋ ‰ํ„ฐ๋ฆฌ ์ด๋™

* fix: ๋ฐฑ์—”๋“œ ๋””๋ ‰ํ„ฐ๋ฆฌ๋กœ ์ด๋™

* fix: ๋ฐฑ์—”๋“œ ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์ด๋™

* fix: checkout actions์˜ ๋””๋ ‰ํ† ๋ฆฌ ์„ค์ •

* fix: ๋””๋ ‰ํ† ๋ฆฌ ์„ค์ •...

* infra: CD ํŒŒ์ดํ”„๋ผ์ธ ์ž‘์„ฑ (#76)

* fix: cd gradle ๋””๋ ‰ํ† ๋ฆฌ ์ด๋™ (#77)

* [BE] refactor: ๋‹จ๊ฑด ๋ฆฌ๋ทฐ ์กฐํšŒ ์‹œ ๋ฆฌ๋ทฐ์–ด ์ •๋ณด ์‚ญ์ œ, ๋ฆฌ๋ทฐ ์ž‘์„ฑ ์‹œ์  ์ถ”๊ฐ€ (#65)

* refactor: ๋ฆฌ๋ทฐ ์กฐํšŒ ์‹œ ๋ฆฌ๋ทฐ ์ƒ์„ฑ ์‹œ๊ฐ ์ถ”๊ฐ€, ๋ฆฌ๋ทฐ์–ด ์ •๋ณด ์‚ญ์ œ

* fix: ํ…Œ์ŠคํŠธ ์–ด๋…ธํ…Œ์ด์…˜ ํ™œ์„ฑํ™” ๋ฐ ์ˆ˜์ •

* chore: ํ…Œ์ŠคํŠธ ํด๋ž˜์Šค ํŒจํ‚ค์ง€ ์ด๋™

* refactor: ๋ถˆํ•„์š”ํ•œ given์ ˆ ์ œ๊ฑฐ

* [FE] ๋ฆฌ๋ทฐ ์ž‘์„ฑ, ์ƒ์„ธ ๋ฆฌ๋ทฐ ๋ณด๊ธฐ ํŽ˜์ด์ง€์— ๋ฐฑ์—”๋“œ API ์—ฐ๋™ ๋ฐ dotenv-webpack ์„ค์น˜, BASE_URL์„ .env๋กœ ์ด๋™ (#78)

* chore: gitignore์— yarn-error.log ์ถ”๊ฐ€

* ci: env ํŒŒ์ผ ์‚ฌ์šฉ์„ ์œ„ํ•œ dotenv-webpack ์„ค์น˜

* refactor: ์—”๋“œํฌ์ธํŠธ์— env ํŒŒ์ผ์„ ํ†ตํ•œ API_BASE_URL ๊ฒฝ๋กœ ์ ์šฉ

* fix: ๋ฆฌ๋ทฐ ์ƒ์„ธ๋ณด๊ธฐ ๋ฐ์ดํ„ฐ์—์„œ ๋ฐฑ์—”๋“œ ์‘๋‹ต๊ณผ ์†์„ฑ ์ด๋ฆ„์ด ๋‹ฌ๋ž๋˜ ๋ถ€๋ถ„ ์ˆ˜์ •

* refactor: ๋ฐฑ์—”๋“œ ์‘๋‹ต ๋ฐ ๋ฆฌํŒฉํ† ๋ง๋œ ๋ฆฌ๋ทฐ ์“ฐ๊ธฐ ํ˜•์‹์— ๋งž๊ฒŒ ๋ฆฌ๋ทฐ ์“ฐ๊ธฐ ๋ชจํ‚น ๋ฐ์ดํ„ฐ ์ˆ˜์ •

* chore: ๋ถˆํ•„์š”ํ•œ console.log ์‚ญ์ œ

* [Fe] ์ ˆ๋Œ€ ๊ฒฝ๋กœ ์‚ฌ์šฉ ์‹œ ๋ฐœ์ƒํ•˜๋Š” eslint ์˜ค๋ฅ˜๋ฅผ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.  (#81)

* fix: stylelint๋ฅผ ํ†ตํ•œ css ์†์„ฑ ์ •๋ ฌ ๊ธฐ๋Šฅ ์˜ค๋ฅ˜ ์ˆ˜์ •

- stylelint ๋ฒ„์ „16๊ณผ ์ถฉ๋Œ๋˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ ์‚ญ์ œ : stylelint-config-prettier, stylelint-prettier
- css ์ •๋ ฌ์— ํ•„์š”ํ•˜์ง€ ์•Š์€ ํ”Œ๋Ÿฌ๊ทธ์ธ ์‚ญ์ œ : stylelint-config-standard, stylelint-config-styled-componented, stylelint-webpack-plugin
- ์ถ”๊ฐ€๋กœ ์„ค์น˜ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ: postcss-syntax, @stylelint/postcss-css-in-js
- stylelint ์ ์šฉ script ์ถ”๊ฐ€
- .stylelintrc.json ์ˆ˜์ • : css ๊ด€๋ จ rule ์„ค์ •

* refactor: stylelint ์ ์šฉ์— ๋”ฐ๋ฅธ css ์†์„ฑ ์ •๋ ฌ

* fix : ์ ˆ๋Œ€ ๊ฒฝ๋กœ ์‚ฌ์šฉ ์‹œ ์˜ค๋ฅ˜ ์ˆ˜์ •

์˜ค๋ฅ˜ : eslintimport/no-unresolved

* chore: eslintrc.cjs ์—์„œ ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ ์‚ญ์ œ

 node ํ™˜๊ฒฝ setting ์‚ญ์ œ

* [FE] ci: Jest, RTL ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ ๊ตฌ์ถ• (#84)

* fix: stylelint๋ฅผ ํ†ตํ•œ css ์†์„ฑ ์ •๋ ฌ ๊ธฐ๋Šฅ ์˜ค๋ฅ˜ ์ˆ˜์ •

- stylelint ๋ฒ„์ „16๊ณผ ์ถฉ๋Œ๋˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ ์‚ญ์ œ : stylelint-config-prettier, stylelint-prettier
- css ์ •๋ ฌ์— ํ•„์š”ํ•˜์ง€ ์•Š์€ ํ”Œ๋Ÿฌ๊ทธ์ธ ์‚ญ์ œ : stylelint-config-standard, stylelint-config-styled-componented, stylelint-webpack-plugin
- ์ถ”๊ฐ€๋กœ ์„ค์น˜ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ: postcss-syntax, @stylelint/postcss-css-in-js
- stylelint ์ ์šฉ script ์ถ”๊ฐ€
- .stylelintrc.json ์ˆ˜์ • : css ๊ด€๋ จ rule ์„ค์ •

* refactor: stylelint ์ ์šฉ์— ๋”ฐ๋ฅธ css ์†์„ฑ ์ •๋ ฌ

* fix : ์ ˆ๋Œ€ ๊ฒฝ๋กœ ์‚ฌ์šฉ ์‹œ ์˜ค๋ฅ˜ ์ˆ˜์ •

์˜ค๋ฅ˜ : eslintimport/no-unresolved

* chore: eslintrc.cjs ์—์„œ ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ ์‚ญ์ œ

 node ํ™˜๊ฒฝ setting ์‚ญ์ œ

* ci: jest ๋ฐ RTL ์„ค์น˜

* ci: jest ํƒ€์ž… ์„ค์ • ์ถ”๊ฐ€

* ci: CI๋ฅผ ์œ„ํ•œ yml ํŒŒ์ผ ํ…Œ์ŠคํŠธ

* fix: ์ž˜๋ชป ์˜ฌ๋ผ๊ฐ„ ํŒŒ์ผ ์‚ญ์ œ

---------

Co-authored-by: badahertz52 <[email protected]>

* [BE] refactor: ๋ฐœ์ƒํ•˜๋Š” ๋ชจ๋“  ์˜ˆ์™ธ์˜ ํ˜•์‹ ํ†ต์ผ (#69)

* refactor: ์ปค์Šคํ…€ ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋„๋ก ์ˆ˜์ •

* refactor: ๋ชจ๋“  ์˜ˆ์™ธ๋ฅผ ์žก์„ ์ˆ˜ ์žˆ๋„๋ก ์ˆ˜์ •

* refactor: ExceptionHandler๊ฐ€ ๋ฐ˜ํ™˜ํ•˜๋Š” ์˜ˆ์™ธ ์‘๋‹ต ํ˜•์‹ ๋ณ€๊ฒฝ

- ProblemDetail๋กœ ๋ณ€๊ฒฝ

* refactor: ResponseEntityExceptionHandler๋ฅผ ์ƒ์†ํ•˜์ง€ ์•Š๋„๋ก ๋ณ€๊ฒฝ

* feat: ResponseEntityExceptionHandler์—์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ์˜ˆ์™ธ๋ฅผ ์ง์ ‘ ํ•ธ๋“ค๋ง

* feat: CORS ์„ค์ • ์ถ”๊ฐ€ (#88)

* fix: ci PR ๋ธŒ๋žœ์น˜ ์„ค์ • (#92)

* refactor: ์˜ˆ์™ธ ํ•ธ๋“ค๋Ÿฌ ์ธ์ž ๋ณ€๊ฒฝ (#87)

* [BE] ๋„๋ฉ”์ธ ์—ฐ๊ด€๊ด€๊ณ„ ์žฌ์„ค์ • (#97)

* feat: ๊นƒํ—ˆ๋ธŒ ์•„์ด๋”” ์›์‹œ๊ฐ’ ํฌ์žฅ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* feat: ํšŒ์› `GithubId` ์‚ฌ์šฉ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* refactor: ํ‚ค์›Œ๋“œ ๋‚ด ์ปฌ๋Ÿผ ์ˆ˜์ • (content)

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* refactor: ์ผ๊ธ‰ ์ปฌ๋ ‰์…˜ ์ด๋ฆ„ ๋ณ€๊ฒฝ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* feat: ์งˆ๋ฌธ ์—”ํ‹ฐํ‹ฐ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* refactor: ๋‹ต๋ณ€ ๊ตฌ์กฐ ๋ณ€๊ฒฝ, ๊ธธ์ด ๊ฒ€์ฆ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* refactor: ํ‚ค์›Œ๋“œ ์—ฐ๊ด€๊ด€๊ณ„ ์—†์ด ์ฐธ์กฐํ•˜๋„๋ก ์„ค์ •

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* test: ๋‹ต๋ณ€ ๊ธธ์ด ํ…Œ์ŠคํŠธ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* feat: ๋ฆฌ๋ทฐ ์ƒ์„ฑ ์‹œ ํ‚ค์›Œ๋“œ ๋ฐ›์•„์„œ ์ƒ์„ฑ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* test: ๋ฆฌ๋ทฐ์–ด์™€ ๋ฆฌ๋ทฐ์ด ๊ฐ™์€ ๊ฒฝ์šฐ์˜ ์˜ˆ์™ธ ํ…Œ์ŠคํŠธ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* chore: ๋ฆฌ๋ทฐ-ํ‚ค์›Œ๋“œ ๋งคํ•‘ ํ…Œ์ด๋ธ” ์‚ญ์ œ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* fix: Fixture ์‚ฌ์šฉํ•ด ์ปดํŒŒ์ผ ์—๋Ÿฌ ํ•ด๊ฒฐ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* refactor: ์ผ๋Œ€๋‹ค ํŽธ์˜ ๋ฉ”์†Œ๋“œ ์ž‘์„ฑ,

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* feat: ๊นƒํ—ˆ๋ธŒ ์•„์ด๋”” ๊ทธ๋ฃน, ๋ฆฌ๋ทฐ์–ด ์—ฐ๊ด€๊ด€๊ณ„

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* feat: ๋ฆฌ๋ทฐ๊ทธ๋ฃน - ๋ฆฌ๋ทฐ ์ผ๋Œ€๋‹ค ๋‹จ๋ฐฉํ–ฅ ์—ฐ๊ด€๊ด€๊ณ„ ์ ์šฉ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* feat: ๋ฆฌ๋ทฐ๊ทธ๋ฃน - ๋ฆฌ๋ทฐ ์ผ๋Œ€๋‹ค ์–‘๋ฐฉํ–ฅ ์—ฐ๊ด€๊ด€๊ณ„ ์ ์šฉ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* feat: ๋ฆฌ๋ทฐ์–ด ๊ทธ๋ฃน ๊นƒํ—ˆ๋ธŒ ์•„์ด๋”” ๊ฒ€์ฆ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* feat: ์…€ํ”„๋ฆฌ๋ทฐ ๊ฒ€์ฆ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* chore: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํŒŒ์ผ ์‚ญ์ œ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* feat: ๋ฆฌ๋ทฐ ์ถ”๊ฐ€ ๊ฒ€์ฆ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* fix: ์ˆœํ™˜ ์ฐธ์กฐ NPE ํ•ด๊ฒฐ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* chore: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” import ์ œ๊ฑฐ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* chore: Github ID ํŒจํ‚ค์ง€ ์ด๋™

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* feat: ๋ฆฌ๋ทฐ - ๋ฆฌ๋ทฐ ๋‹ต๋ณ€ ์—ฐ๊ด€๊ด€๊ณ„ ์„ค์ •

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* chore: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ฝ”๋“œ ์ œ๊ฑฐ

* refactor: ๋‚ด๊ฐ€ ๋ฐ›์€ ๋ฆฌ๋ทฐ ์ƒ์„ธ ๋ณด๊ธฐ ๊ตฌํ˜„

---------

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* [FE] feat: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํŽ˜์ด์ง€ ๊ธฐ๋Šฅ ๊ตฌํ˜„ (#89)

* fix: stylelint๋ฅผ ํ†ตํ•œ css ์†์„ฑ ์ •๋ ฌ ๊ธฐ๋Šฅ ์˜ค๋ฅ˜ ์ˆ˜์ •

- stylelint ๋ฒ„์ „16๊ณผ ์ถฉ๋Œ๋˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ ์‚ญ์ œ : stylelint-config-prettier, stylelint-prettier
- css ์ •๋ ฌ์— ํ•„์š”ํ•˜์ง€ ์•Š์€ ํ”Œ๋Ÿฌ๊ทธ์ธ ์‚ญ์ œ : stylelint-config-standard, stylelint-config-styled-componented, stylelint-webpack-plugin
- ์ถ”๊ฐ€๋กœ ์„ค์น˜ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ: postcss-syntax, @stylelint/postcss-css-in-js
- stylelint ์ ์šฉ script ์ถ”๊ฐ€
- .stylelintrc.json ์ˆ˜์ • : css ๊ด€๋ จ rule ์„ค์ •

* refactor: stylelint ์ ์šฉ์— ๋”ฐ๋ฅธ css ์†์„ฑ ์ •๋ ฌ

* chore: ํ˜„์žฌ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ์ €์žฅ ๋ฒ„ํŠผ ์ˆจ๊น€ ์ฒ˜๋ฆฌ

* design: ๊ธฐ๋ณธ ํฐํŠธ ์‚ฌ์ด์ฆˆ ๋ณ€๊ฒฝ

- 15px -> 16px๋กœ ์ˆ˜์ •

* fix : ์ ˆ๋Œ€ ๊ฒฝ๋กœ ์‚ฌ์šฉ ์‹œ ์˜ค๋ฅ˜ ์ˆ˜์ •

์˜ค๋ฅ˜ : eslintimport/no-unresolved

* design: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํŽ˜์ด์ง€์˜ ์ˆ˜์ •๋œ ๋””์ž์ธ ์ ์šฉ

- ์ƒ‰์ƒ ์ฝ”๋“œ ์ˆ˜์ •
- ๋ฒ„ํŠผ ํ˜ธ๋ฒ„ ์‹œ ์Šคํƒ€์ผ๋ง ์ˆ˜์ •
- ๋ฆฌ๋ทฐ ๋งˆ๊ฐ์ผ ๋‚ ์งœ ํ˜•์‹ ๋ณ€๊ฒฝ

* design: ๋ฆฌ๋ทฐ ์งˆ๋ฌธ์— ์•ˆ๋‚ด ๋ฌธ๊ตฌ ๋ฐ placeholder ์ถ”๊ฐ€

- ๊ฐ ์งˆ๋ฌธ์— ' (20์ž ์ด์ƒ)' ๋ฌธ๊ตฌ ํ•˜๋“œ์ฝ”๋”ฉ
- ์ตœ๋Œ€ 1000์ž ์ž…๋ ฅ ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๋ฌธ๊ตฌ๋ฅผ textarea์˜ placeholder๋กœ ์ถ”๊ฐ€

* chore: eslintrc.cjs ์—์„œ ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ ์‚ญ์ œ

 node ํ™˜๊ฒฝ setting ์‚ญ์ œ

* chore: api๋ช… ๋ฐ endpoint๋ช… ์ˆ˜์ •

* chore: ๋ฆฌ๋ทฐ ์งˆ๋ฌธ ๋ชฉ๋ก์„ ์„œ๋ฒ„์—์„œ ๋ฐ›์•„์˜ค๊ธฐ ์œ„ํ•ด ์ƒ์ˆ˜ ์ œ๊ฑฐ

* chore: api ๋ฌธ์„œ ํ˜•์‹์— ๋งž๊ฒŒ ๋ฐ์ดํ„ฐ ํƒ€์ž… ์ˆ˜์ •

* fix: ํ‚ค์›Œ๋“œ ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„ ๋•Œ ํผ์ด ์ œ์ถœ๋˜๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ

* feat: ์ž‘์„ฑํ•œ ๋ฆฌ๋ทฐ ๋‚ด์šฉ์„ ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์˜ ์ƒํƒœ์™€ ๋™๊ธฐํ™”ํ•˜๋„๋ก ์„ค์ •

* design: textarea์˜ ํฌ๊ธฐ๋ฅผ ๊ณ ์ •์‹œํ‚ค๊ณ , ๋„˜์–ด๊ฐˆ ๊ฒฝ์šฐ ์Šคํฌ๋กค ๋˜๋„๋ก ๋ณ€๊ฒฝ

* design: ๊ณตํ†ต ๋ฒ„ํŠผ ์ปดํฌ๋„ŒํŠธ์— ์กฐ๊ฑด๋ถ€ ์Šคํƒ€์ผ๋ง ๊ตฌํ˜„

* design: disabled ๊ด€๋ จ ์ƒ‰์ƒ ๋ณ€์ˆ˜ ์ถ”๊ฐ€

* feat: ๋ชจ๋“  ํผ์„ ์ž‘์„ฑํ–ˆ์„ ๋•Œ ์ œ์ถœ ๋ฒ„ํŠผ์ด ํ™œ์„ฑํ™”๋˜๋„๋ก ๊ตฌํ˜„, ํ‚ค์›Œ๋“œ ์„ ํƒ ๋กœ์ง ๊ตฌํ˜„

* feat: ์ œ์ถœ ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ confirm ๋ฐœ์ƒ, ํ•œ ๋ฒˆ ๋” ํ™•์ธ ์‹œ ์ œ์ถœ๋˜๋„๋ก ๊ตฌํ˜„

* feat: ํ‚ค์›Œ๋“œ ๋ฒ„ํŠผ์„ 5๊ฐœ ์ดˆ๊ณผํ•ด์„œ ์„ ํƒํ•  ์ˆ˜ ์—†๋„๋ก ๊ตฌํ˜„

* feat: textarea์— 1000์ž๋ฅผ ์ดˆ๊ณผํ•ด์„œ ์ž…๋ ฅํ•  ์ˆ˜ ์—†๋„๋ก ๊ตฌํ˜„ ๋ฐ ํ˜„์žฌ ๊ธ€์ž์ˆ˜ ํ‘œ์‹œ

* fix: ์ด๋ฏธ ์„ ํƒ๋œ ํ‚ค์›Œ๋“œ๋ฅผ ํ•ด์ œํ•˜๋ ค ํ•ด๋„ ๊ฐœ์ˆ˜ ์ œํ•œ๋˜๋Š” ์˜ค๋ฅ˜ ์ˆ˜์ •

* refactor: ํผ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ์กฐ๊ฑด๋“ค์„ ๋ณ€์ˆ˜๋กœ ๋ถ„๋ฆฌ

* design: ํ‚ค์›Œ๋“œ ๋ฒ„ํŠผ๋“ค์˜ ํฌ๊ธฐ๋ฅผ fit-content๋กœ ๋ณ€๊ฒฝ ๋ฐ ๊ฐ€๋กœ๋กœ ๋‚˜์—ดํ•˜๋„๋ก ์ˆ˜์ •

* chore: api ์—ฐ๊ฒฐ ์ด์ „, ์ž„์‹œ๋กœ ํผ ์ •๋ณด๋ฅผ ์ฝ˜์†”์— ์ถœ๋ ฅํ•˜๋„๋ก ์„ค์ •

* chore: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ์™„๋ฃŒ ํŽ˜์ด์ง€ ๋ผ์šฐํ„ฐ ์ถ”๊ฐ€

* feat: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ์™„๋ฃŒ ํŽ˜์ด์ง€ ๋ฐ ์ž‘์„ฑ ์™„๋ฃŒ ์‹œ ํŽ˜์ด์ง€ ์ด๋™ ๊ธฐ๋Šฅ ๊ตฌํ˜„

* refactor: ๋ฆฌ๋ทฐ ์•„์ดํ…œ ์ปดํฌ๋„ŒํŠธ ๋งค์ง๋„˜๋ฒ„ ์ƒ์ˆ˜ํ™”

* chore: ์‹œ๊ณ„ ์•„์ด์ฝ˜ ์Šคํƒ€์ผ ์ปดํฌ๋„ŒํŠธํ™”

* refactor: ๋ฆฌ๋ทฐ ๊ด€๋ จ ๋ฉ”์‹œ์ง€ ์ƒ์ˆ˜ ๋ถ„๋ฆฌ

* design: ๋ฆฌ๋ทฐ ์ž‘์„ฑ๋ž€ placeholder ๋ฐ ๋ณธ๋ฌธ font weight ๋ณ€๊ฒฝ

* refactor: ๋ฆฌ๋ทฐ ๋ฌธํ•ญ ๋ฒˆํ˜ธ ๋™์ ์œผ๋กœ ๋ถ€์—ฌํ•˜๋„๋ก ๋ณ€๊ฒฝ ๋ฐ ์ƒ์ˆ˜ํ™” ์ ์šฉ

* refactor: on-, handle- prefix ๊ด€๋ จ ์ปจ๋ฒค์…˜ ์ ์šฉ ๋ฐ ํ‚ค์›Œ๋“œ ๋ฒ„ํŠผ ์ธํ„ฐํŽ˜์ด์Šค ํ™•์žฅ

* chore: ๋ฆฌ๋ทฐ ๋‹ต๋ณ€์˜ ๊ธธ์ด๊ฐ€ ์œ ํšจํ•œ์ง€ ์ฒดํฌํ•˜๋Š” ๋ณ€์ˆ˜์˜ ์ด๋ฆ„์„ ์˜๋ฏธ๋ฅผ ์ž˜ ๋“œ๋Ÿฌ๋‚ด๋„๋ก ์ˆ˜์ •

* refactor: ๊ณตํ†ต ๋ฒ„ํŠผ์˜ ํƒ€์ž…๋ณ„ ์Šคํƒ€์ผ์„ ํ•จ์ˆ˜๋กœ ๋ถ„๋ฆฌ

* style: api ํ˜ธ์ถœ ํ•จ์ˆ˜๋ช… ์ปจ๋ฒค์…˜์— ๋งž๊ฒŒ ์ˆ˜์ •

* chore: ๋ถˆํ•„์š”ํ•œ PropsWithChildren import ์ œ๊ฑฐ

---------

Co-authored-by: badahertz52 <[email protected]>

* [FE] MSW๋ฅผ mock server๋กœ ์…‹ํŒ… (#95)

* fix: stylelint๋ฅผ ํ†ตํ•œ css ์†์„ฑ ์ •๋ ฌ ๊ธฐ๋Šฅ ์˜ค๋ฅ˜ ์ˆ˜์ •

- stylelint ๋ฒ„์ „16๊ณผ ์ถฉ๋Œ๋˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ ์‚ญ์ œ : stylelint-config-prettier, stylelint-prettier
- css ์ •๋ ฌ์— ํ•„์š”ํ•˜์ง€ ์•Š์€ ํ”Œ๋Ÿฌ๊ทธ์ธ ์‚ญ์ œ : stylelint-config-standard, stylelint-config-styled-componented, stylelint-webpack-plugin
- ์ถ”๊ฐ€๋กœ ์„ค์น˜ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ: postcss-syntax, @stylelint/postcss-css-in-js
- stylelint ์ ์šฉ script ์ถ”๊ฐ€
- .stylelintrc.json ์ˆ˜์ • : css ๊ด€๋ จ rule ์„ค์ •

* refactor: stylelint ์ ์šฉ์— ๋”ฐ๋ฅธ css ์†์„ฑ ์ •๋ ฌ

* fix : ์ ˆ๋Œ€ ๊ฒฝ๋กœ ์‚ฌ์šฉ ์‹œ ์˜ค๋ฅ˜ ์ˆ˜์ •

์˜ค๋ฅ˜ : eslintimport/no-unresolved

* chore: eslintrc.cjs ์—์„œ ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ ์‚ญ์ œ

 node ํ™˜๊ฒฝ setting ์‚ญ์ œ

* style: eslint ์ ์šฉ์— ๋”ฐ๋ฅธ ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€ import ์ˆœ์„œ ์ •๋ฆฌ

* refactor: formatDate๋ฅผ utils/date ํŒŒ์ผ๋กœ ์ด๋™

* design: theme์— colors,, fontSize ๋ณ€๊ฒฝ ๋ฐ borderRadius ์ถ”๊ฐ€

* feat: MultilineTextViewer ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ

- ๊ฐœํ–‰์ด ํฌํ•จ๋œ string์— ๊ฐœํ–‰์„ ์ ์šฉํ•ด์„œ ๋ณด์—ฌ์ฃผ๋Š” ์ปดํฌ๋„ŒํŠธ

* feat: ๊นƒํ—ˆ๋ธŒ ์ €์žฅ์†Œ ์ด๋ฏธ์ง€ ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ

* feat: ๋ฆฌ๋ทฐ์™€ ๊ด€๋ จ๋œ ๋‚ ์งœ UI ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ

* featr: LockButton ์‚ญ์ œ LockToggle ์ถ”๊ฐ€

* refactor: ํ”ผ๊ทธ๋งˆ ๋””์ž์ธ ๋ณ€๊ฒฝ์— ๋”ฐ๋ฅธ ReviewDescription ๋ณ€๊ฒฝ

* feat: ReviewComment ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ

* refactor: ReviewViewSection -> ReviewSection ์œผ๋กœ ๋ณ€๊ฒฝ ๋ฐ ๋ฆฌํŒฉํ† ๋ง

- ๋ถˆํ•„์š”ํ•œ  ์ปดํฌ๋„ŒํŠธ ์‚ญ์ œ : RevieAnswer , ReviewQuestion

* refactor: DetailedReviewPage ๋ฆฌํŒฉํ† ๋ง

- ๋ชฉ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ
-  ์ถ”๊ฐ€ ๋ฐ ๋ณ€๊ฒฝ๋œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•ด ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€ ์ปดํฌ๋„ŒํŠธ(DetailedReviewPage) ๋ฆฌํŒฉํ† ๋ง
- DetailedReviewPage ํด๋”์˜ styles.ts ์‚ญ์ œ

* refactor: review์— ๋Œ€ํ•œ ํƒ€์ž… ๋ณ€๊ฒฝ

* design : ReviewDate์˜ ํด๋ก  ์Šคํƒ€์ผ ์ ์šฉ

* feat: KeywordSection ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ

- ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€ ํ‚ค์›Œ๋“œ ๋ถ€๋ถ„ ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ

* feat: ReviewSectionHeader ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ ๋ฐ ์ ์šฉ

- ๋ฆฌ๋ทฐ ์ƒ์„ธ๋ณด๊ธฐ์—์„œ ๋ฐ˜๋ณต๋˜๋Š” ์งˆ๋ฌธ,ํ‚ค์›Œ๋“œ ํ—ค๋”๋ถ€๋ถ„์„ ์ปดํฌ๋„ŒํŠธ๋กœ ๋ถ„๋ฆฌ

* design : ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€์— width ๋ณ€๊ฒฝ

* refactor: DetailedReview์˜ ๋ชฉ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ๋ฐ ๋ฆฌํŒฉํ† ๋ง

- ํƒ€์ž… ๋ณ€๊ฒฝ์— ๋”ฐ๋ฅธ ๋ชฉ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ
- KeywordSection ์ ์šฉ

* design : formWidth๋ฅผ theme์— ์ถ”๊ฐ€ ๋ฐ ๋ฆฌ๋ทฐ ์ž‘์„ฑ/๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€์— ์ ์šฉ

* fix: Layout์—์„œ ๊ฐ€๋กœ ์Šคํฌ๋กค ์ƒ๊ธฐ๋Š” ์˜ค๋ฅ˜ ์ˆ˜์ •

- 100vw๋Š” ์Šคํฌ๋กค์„ ํฌํ•จํ•œ ๋ทฐํฌํŠธ ๋„ˆ๋น„๋ผ์„œ 100%์œผ๋กœ ์ˆ˜์ •

* feat: ๋ฆฌ๋ทฐ ์ƒํŽ˜์ด์ง€ router์— ๋ผ์šฐํ„ฐ ํŒŒ๋ผ๋ฏธํ„ฐ ์ ์šฉ ๋ฐ ๊ด€๋ จ ์„ค์ • ๋ณ€๊ฒฝ

- ๋ฐ๋ชจ๋ฐ์ด๋ฅผ ์œ„ํ•ด ํ˜„์žฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์žˆ๋Š” ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€ id๋ฅผ sidebar์˜ ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€ ๋ฉ”๋‰ด link์— ์ ์šฉ
- ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€(DetailedReviewPage)์˜ api ํ•ธ๋“ค๋Ÿฌ ์ˆ˜์ •

* docs: ๋ณ€์ˆ˜๋ช… ๋ณ€๊ฒฝ (isLock -> isPublic)

* refactor: ๊นƒํ—™ ์ €์žฅ์†Œ ๋กœ๊ณ  ์ฃผ์†Œ ๋ณ€์ˆ˜๋ช… ๋ณ€๊ฒฝ

- projectImgSrc -> thumbnailUrl

* ci: msw ๊ด€๋ จ ํŒจํ‚ค์ง€ ์„ค์น˜

* ci: msw ๊ด€๋ จ ์„ค์ •ํŒŒ์ผ ์ถ”๊ฐ€

- ๋ธŒ๋ผ์šฐ์ € ํ™˜๊ฒฝ, node ํ™˜๊ฒฝ์—์„œ msw๋กœ ๋ชฉ์„œ๋ฒ„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ด€๋ จ ํŒŒ์ผ ์ถ”๊ฐ€

* feat: mock ํ•ธ๋“ค๋Ÿฌ ์ถ”๊ฐ€ ๋ฐ ์ƒ์„ธ ๋ฆฌ๋ทฐ ํŽ˜์ด์ง€ ๋ชฉ ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€

* feat:  root์—์„œ ๋ชฉ์„œ๋ฒ„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋กํ•จ

* refactor: endpoint ์ˆ˜์ •

- env ์—์„œ ์„œ๋ฒ„ ์ฃผ์†Œ ๋์— ์Šฌ๋ž˜์‹œ ๋„ฃ๋Š” ๊ฒƒ์œผ๋กœ ํ†ต์ผ

* feat: ์ƒ์„ธ ๋ฆฌ๋ทฐ ํŽ˜์ด์ง€(detailedReviewPage)์— ๋ชฉ์„œ๋ฒ„ ์—ฐ๊ฒฐ ๋ฐ ๊ด€๋ จ ์ฝ”๋“œ ์ˆ˜์ •

- ์ƒํƒœ๋ช… ๋ณ€๊ฒฝ: detailReview -> detailedReview
- detailedReview ํƒ€์ž…์— null ์ถ”๊ฐ€ ๋ฐ ๊ทธ์— ๋”ฐ๋ฅธ ์˜ค๋ฅ˜ ํ•ธ๋“ค๋ง ์ถ”๊ฐ€
- deadline์— string ํƒ€์ž…์œผ๋กœ response๋กœ ์ „๋‹ฌ๋˜์–ด์„œ new Date๋กœ ๊ฐ์‹ธ์„œ props๋กœ ์ „๋‹ฌ

* docs: indexhtml์˜ title ๋ณ€๊ฒฝ

* style: apis/review.ts ์˜ import ๊ด€๋ จ eslint rule ์ ์šฉ์— ๋”ฐ๋ฅธ ์ˆ˜์ •

* fix: ts์—์„œ process ์ฝ์ง€ ๋ชปํ•˜๋Š” ์˜ค๋ฅ˜ ์ˆ˜์ •

* fix: webpack dev server script ๋ณต์›

* [FE] ์ƒ์„ธ ๋ฆฌ๋ทฐ ํŽ˜์ด์ง€ : url router ์—ฐ๋™, ๋ณ€๊ฒฝ๋œ ๋””์ž์ธ ๋ฐ˜์˜ ๋ฐ ์„œ๋ฒ„์—์„œ api๋ฅผ ์—ฐ๋™ (#91)

* fix: stylelint๋ฅผ ํ†ตํ•œ css ์†์„ฑ ์ •๋ ฌ ๊ธฐ๋Šฅ ์˜ค๋ฅ˜ ์ˆ˜์ •

- stylelint ๋ฒ„์ „16๊ณผ ์ถฉ๋Œ๋˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ ์‚ญ์ œ : stylelint-config-prettier, stylelint-prettier
- css ์ •๋ ฌ์— ํ•„์š”ํ•˜์ง€ ์•Š์€ ํ”Œ๋Ÿฌ๊ทธ์ธ ์‚ญ์ œ : stylelint-config-standard, stylelint-config-styled-componented, stylelint-webpack-plugin
- ์ถ”๊ฐ€๋กœ ์„ค์น˜ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ: postcss-syntax, @stylelint/postcss-css-in-js
- stylelint ์ ์šฉ script ์ถ”๊ฐ€
- .stylelintrc.json ์ˆ˜์ • : css ๊ด€๋ จ rule ์„ค์ •

* refactor: stylelint ์ ์šฉ์— ๋”ฐ๋ฅธ css ์†์„ฑ ์ •๋ ฌ

* fix : ์ ˆ๋Œ€ ๊ฒฝ๋กœ ์‚ฌ์šฉ ์‹œ ์˜ค๋ฅ˜ ์ˆ˜์ •

์˜ค๋ฅ˜ : eslintimport/no-unresolved

* chore: eslintrc.cjs ์—์„œ ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ ์‚ญ์ œ

 node ํ™˜๊ฒฝ setting ์‚ญ์ œ

* style: eslint ์ ์šฉ์— ๋”ฐ๋ฅธ ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€ import ์ˆœ์„œ ์ •๋ฆฌ

* refactor: formatDate๋ฅผ utils/date ํŒŒ์ผ๋กœ ์ด๋™

* design: theme์— colors,, fontSize ๋ณ€๊ฒฝ ๋ฐ borderRadius ์ถ”๊ฐ€

* feat: MultilineTextViewer ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ

- ๊ฐœํ–‰์ด ํฌํ•จ๋œ string์— ๊ฐœํ–‰์„ ์ ์šฉํ•ด์„œ ๋ณด์—ฌ์ฃผ๋Š” ์ปดํฌ๋„ŒํŠธ

* feat: ๊นƒํ—ˆ๋ธŒ ์ €์žฅ์†Œ ์ด๋ฏธ์ง€ ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ

* feat: ๋ฆฌ๋ทฐ์™€ ๊ด€๋ จ๋œ ๋‚ ์งœ UI ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ

* featr: LockButton ์‚ญ์ œ LockToggle ์ถ”๊ฐ€

* refactor: ํ”ผ๊ทธ๋งˆ ๋””์ž์ธ ๋ณ€๊ฒฝ์— ๋”ฐ๋ฅธ ReviewDescription ๋ณ€๊ฒฝ

* feat: ReviewComment ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ

* refactor: ReviewViewSection -> ReviewSection ์œผ๋กœ ๋ณ€๊ฒฝ ๋ฐ ๋ฆฌํŒฉํ† ๋ง

- ๋ถˆํ•„์š”ํ•œ  ์ปดํฌ๋„ŒํŠธ ์‚ญ์ œ : RevieAnswer , ReviewQuestion

* refactor: DetailedReviewPage ๋ฆฌํŒฉํ† ๋ง

- ๋ชฉ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ
-  ์ถ”๊ฐ€ ๋ฐ ๋ณ€๊ฒฝ๋œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•ด ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€ ์ปดํฌ๋„ŒํŠธ(DetailedReviewPage) ๋ฆฌํŒฉํ† ๋ง
- DetailedReviewPage ํด๋”์˜ styles.ts ์‚ญ์ œ

* refactor: review์— ๋Œ€ํ•œ ํƒ€์ž… ๋ณ€๊ฒฝ

* design : ReviewDate์˜ ํด๋ก  ์Šคํƒ€์ผ ์ ์šฉ

* feat: KeywordSection ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ

- ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€ ํ‚ค์›Œ๋“œ ๋ถ€๋ถ„ ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ

* feat: ReviewSectionHeader ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ ๋ฐ ์ ์šฉ

- ๋ฆฌ๋ทฐ ์ƒ์„ธ๋ณด๊ธฐ์—์„œ ๋ฐ˜๋ณต๋˜๋Š” ์งˆ๋ฌธ,ํ‚ค์›Œ๋“œ ํ—ค๋”๋ถ€๋ถ„์„ ์ปดํฌ๋„ŒํŠธ๋กœ ๋ถ„๋ฆฌ

* design : ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€์— width ๋ณ€๊ฒฝ

* refactor: DetailedReview์˜ ๋ชฉ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ๋ฐ ๋ฆฌํŒฉํ† ๋ง

- ํƒ€์ž… ๋ณ€๊ฒฝ์— ๋”ฐ๋ฅธ ๋ชฉ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ
- KeywordSection ์ ์šฉ

* design : formWidth๋ฅผ theme์— ์ถ”๊ฐ€ ๋ฐ ๋ฆฌ๋ทฐ ์ž‘์„ฑ/๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€์— ์ ์šฉ

* fix: Layout์—์„œ ๊ฐ€๋กœ ์Šคํฌ๋กค ์ƒ๊ธฐ๋Š” ์˜ค๋ฅ˜ ์ˆ˜์ •

- 100vw๋Š” ์Šคํฌ๋กค์„ ํฌํ•จํ•œ ๋ทฐํฌํŠธ ๋„ˆ๋น„๋ผ์„œ 100%์œผ๋กœ ์ˆ˜์ •

* feat: ๋ฆฌ๋ทฐ ์ƒํŽ˜์ด์ง€ router์— ๋ผ์šฐํ„ฐ ํŒŒ๋ผ๋ฏธํ„ฐ ์ ์šฉ ๋ฐ ๊ด€๋ จ ์„ค์ • ๋ณ€๊ฒฝ

- ๋ฐ๋ชจ๋ฐ์ด๋ฅผ ์œ„ํ•ด ํ˜„์žฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์žˆ๋Š” ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€ id๋ฅผ sidebar์˜ ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€ ๋ฉ”๋‰ด link์— ์ ์šฉ
- ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€(DetailedReviewPage)์˜ api ํ•ธ๋“ค๋Ÿฌ ์ˆ˜์ •

* docs: ๋ณ€์ˆ˜๋ช… ๋ณ€๊ฒฝ (isLock -> isPublic)

* refactor: ๊นƒํ—™ ์ €์žฅ์†Œ ๋กœ๊ณ  ์ฃผ์†Œ ๋ณ€์ˆ˜๋ช… ๋ณ€๊ฒฝ

- projectImgSrc -> thumbnailUrl

* refactor: ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€ api ๋ณ€๊ฒฝ์— ๋”ฐ๋ฅธ ์ˆ˜์ •

- ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€ keyword ํƒ€์ž… ๋ณ€๊ฒฝ
- api endpoint ๋ณ€๊ฒฝ , router ๋ณ€๊ฒฝ, sidebar ์ƒ์„ธ๋ณด๊ธฐ ๊ฒฝ๋กœ ๋ณ€๊ฒฝ
- useState์— ๋นˆ ๊ฐ’์— ๋Œ€ํ•œ ํƒ€์ž… ์ถ”๋ก  ์‚ฌ์šฉ

* [BE] test: ๋„๋ฉ”์ธ ์—ฐ๊ด€๊ด€๊ณ„ ์žฌ์„ค์ • ํ›„ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ (#101)

* test: ๋ฆฌ๋ทฐ์–ด ๊ทธ๋ฃน ํ…Œ์ŠคํŠธ ์ž‘์„ฑ

* refactor: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํ…Œ์ŠคํŠธ๋ฅผ `ReviewTest`๋กœ ์ด๋™

* test: ๋ฆฌ๋ทฐ์–ด ์ค‘๋ณต ์ถ”๊ฐ€ ํ…Œ์ŠคํŠธ

* refactor: Test Fixture ์‚ฌ์šฉํ•˜๋„๋ก ์ˆ˜์ •

* refactor: ์˜ˆ์™ธ ํด๋ž˜์Šค๋ช… ํ†ต์ผ

* style: ํ…Œ์ŠคํŠธ ๊ฐœํ–‰

* refactor: ํ…Œ์ŠคํŠธ๋ช… ๋ช…ํ™•ํ•˜๊ฒŒ ์ˆ˜์ •

* refactor: ํšŒ์› ๋„๋ฉ”์ธ์—์„œ์˜ ๋น„๊ต๋ฅผ GithubId๋กœ ์ง„ํ–‰ํ•˜๋„๋ก ์ˆ˜์ •

* refactor: createdAt ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ , deadline์œผ๋กœ ์ˆ˜์ •

* refactor: ํ•„๋“œ๋ช… reviewerGithubIds๋กœ ํ†ต์ผ

* test: ๋ฆฌ๋ทฐ์–ด ์ค‘๋ณต ์ƒ์„ฑ ๊ฒ€์ฆ

* refactor: reviewer/reviewee ํ†ต์ผ

* refactor: ๋ฆฌ๋ทฐ์–ด-๋ฆฌ๋ทฐ์ด github id๋ฅผ ๋ช…์‹œ

* refactor: ํ…Œ์ŠคํŠธ์— ํ•˜๋‚˜์˜ ๊ฒ€์ฆ๋งŒ ์ง„ํ–‰๋˜๋„๋ก ์ˆ˜์ •

* [FE] feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํŽ˜์ด์ง€ ๊ธฐ๋Šฅ ๊ตฌํ˜„ (#90)

* fix: stylelint๋ฅผ ํ†ตํ•œ css ์†์„ฑ ์ •๋ ฌ ๊ธฐ๋Šฅ ์˜ค๋ฅ˜ ์ˆ˜์ •

- stylelint ๋ฒ„์ „16๊ณผ ์ถฉ๋Œ๋˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ ์‚ญ์ œ : stylelint-config-prettier, stylelint-prettier
- css ์ •๋ ฌ์— ํ•„์š”ํ•˜์ง€ ์•Š์€ ํ”Œ๋Ÿฌ๊ทธ์ธ ์‚ญ์ œ : stylelint-config-standard, stylelint-config-styled-componented, stylelint-webpack-plugin
- ์ถ”๊ฐ€๋กœ ์„ค์น˜ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ: postcss-syntax, @stylelint/postcss-css-in-js
- stylelint ์ ์šฉ script ์ถ”๊ฐ€
- .stylelintrc.json ์ˆ˜์ • : css ๊ด€๋ จ rule ์„ค์ •

* refactor: stylelint ์ ์šฉ์— ๋”ฐ๋ฅธ css ์†์„ฑ ์ •๋ ฌ

* fix : ์ ˆ๋Œ€ ๊ฒฝ๋กœ ์‚ฌ์šฉ ์‹œ ์˜ค๋ฅ˜ ์ˆ˜์ •

์˜ค๋ฅ˜ : eslintimport/no-unresolved

* chore: eslintrc.cjs ์—์„œ ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ ์‚ญ์ œ

 node ํ™˜๊ฒฝ setting ์‚ญ์ œ

* feat: DropDown ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„

- ์‚ฌ์šฉ์ž ์„ ํƒ์„ ์œ„ํ•œ `DropDown` ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ตฌํ˜„
- `onChange` ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ์™€ `options` ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜์—ฌ ์˜ต์…˜์„ ๋™์ ์œผ๋กœ ํ‘œ์‹œ

Co-Authored-By: badahertz52 <[email protected]>
Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: Fe <[email protected]>

* chore: svg ์•„์ด์ฝ˜ ํฌ๊ธฐ ์ˆ˜์ •

Co-Authored-By: badahertz52 <[email protected]>
Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: Fe <[email protected]>

* design: Topbar UI ์ˆ˜์ •

Co-Authored-By: badahertz52 <[email protected]>
Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: Fe <[email protected]>

* design: ๋ฒ„ํŠผ, ๊ฒ€์ƒ‰์ฐฝ UI ์ˆ˜์ • ํ›„ export

Co-Authored-By: badahertz52 <[email protected]>
Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: Fe <[email protected]>

* feat: ReviewPreviewCard ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„

- ๋ฆฌ๋ทฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์นด๋“œ ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„
- ๋ฆฌ๋ทฐ์–ด ๊ทธ๋ฃน ์ด๋ฆ„, ์ƒ์„ฑ์ผ, ๋ฆฌ๋ทฐ ๋‚ด์šฉ ๋ฏธ๋ฆฌ๋ณด๊ธฐ, ํ‚ค์›Œ๋“œ, ๊ณต๊ฐœ ์—ฌ๋ถ€๋ฅผ ํ‘œ์‹œ

Co-Authored-By: badahertz52 <[email protected]>
Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: Fe <[email protected]>

* chore: ReviewPreview ์ธํ„ฐํŽ˜์ด์Šค ์ถ”๊ฐ€

- ๋ฆฌ๋ทฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ์ •์˜ํ•˜๋Š” `ReviewPreview` ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

Co-Authored-By: badahertz52 <[email protected]>
Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: Fe <[email protected]>

* feat: SearchSection ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„

- ๊ฒ€์ƒ‰ ์ž…๋ ฅ์ฐฝ, ๊ฒ€์ƒ‰ ๋ฒ„ํŠผ, ๋“œ๋กญ๋‹ค์šด์„ ํฌํ•จํ•˜์—ฌ ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„

Co-Authored-By: badahertz52 <[email protected]>
Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: Fe <[email protected]>

* feat: ReviewPreviewListPage ๊ตฌํ˜„ ๋ฐ ๋ชจ์˜ ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€

- `ReviewPreviewListPage` ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„
  - `SearchSection`์„ ํฌํ•จํ•˜์—ฌ ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„
  - `ReviewPreviewCard`๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฆฌ๋ทฐ ๋ชฉ๋ก์„ ํ‘œ์‹œ
- ๋ชจ์˜ ๋ฐ์ดํ„ฐ(`mockReviewPreviews`) ์ถ”๊ฐ€

Co-Authored-By: badahertz52 <[email protected]>
Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: Fe <[email protected]>

* chore: import ์ค‘๋ณต ๋ฐ ์ˆœ์„œ ์ •๋ฆฌ, ReviewPreviewListPage ๋ผ์šฐํŠธ ์ถ”๊ฐ€

Co-Authored-By: badahertz52 <[email protected]>
Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: Fe <[email protected]>

* chore: ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์š”์†Œ๋ฅผ ๊ฐ์‹ธ๊ธฐ ๋•Œ๋ฌธ์— Container๋กœ ๋ณ€๊ฒฝ

Co-Authored-By: badahertz52 <[email protected]>
Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: Fe <[email protected]>

* feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ๋ฐ์ดํ„ฐ๋ฅผ ์„œ๋ฒ„์—์„œ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•ด getReviewListApi ํ•จ์ˆ˜ ์ถ”๊ฐ€

Co-Authored-By: badahertz52 <[email protected]>
Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: Fe <[email protected]>

* refactor: ์ƒ์„ธ ๋ฆฌ๋ทฐ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ api ์—”๋“œํฌ์ธํŠธ ์ˆ˜์ •

Co-Authored-By: badahertz52 <[email protected]>
Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: Fe <[email protected]>

* refactor: ์ƒ์„ธ ๋ฆฌ๋ทฐ ํŽ˜์ด์ง€ API ์—ฐ๋™ ๋ถ€๋ถ„ ์ˆ˜์ •

Co-Authored-By: badahertz52 <[email protected]>
Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: Fe <[email protected]>

---------

Co-authored-by: badahertz52 <[email protected]>
Co-authored-by: ImxYJL <[email protected]>
Co-authored-by: Fe <[email protected]>

* [BE] feat: ๋ฆฌ๋ทฐ ์ž‘์„ฑ API ๊ตฌํ˜„ (#102)

* refactor: ๋ฆฌ๋ทฐ ์š”์ฒญ dto ์ˆ˜์ •

* refactor: ๋ฆฌ๋ทฐ ์ฝ˜ํ…์ธ  ์ƒ์„ฑ ์‹œ, ๋ฆฌ๋ทฐ์— ์ž์‹ ์„ ์ถ”๊ฐ€ํ•˜๋„๋ก ๋ณ€๊ฒฝ

* feat: QuestionRepository ์ถ”๊ฐ€

* feat: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ๊ธฐ๋Šฅ ์ถ”๊ฐ€

* test: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

* refactor: ReviewGroup ์ƒ์„ฑ ์‹œ, GithubIdReviewerGroup๋„ ๊ฐ™์ด ์ €์žฅ๋˜๋„๋ก ๋ณ€๊ฒฝ

* refactor: GithubId equals ๋ฐ hashcode ์žฌ์ •์˜

* refactor: review ์ƒ์„ฑ ์‹œ, reviewGroup์ด null์ด ์•„๋‹ˆ๋„๋ก ๋ณ€๊ฒฝ

* refactor: EqualsAndHashCode์— id ๋ช…์‹œ

* refactor: reviewee๋ฅผ reviewerGroup ํ†ตํ•ด์„œ ๋ฐ›์•„์˜ค๋„๋ก ๋ณ€๊ฒฝ

* refactor: ํŒŒ๋ผ๋ฏธํ„ฐ long ํƒ€์ž…์œผ๋กœ ๋ณ€๊ฒฝ

* test: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ณ€์ˆ˜ ์ œ๊ฑฐ

* test: ํŒŒ๋ผ๋ฏธํ„ฐ๋ณ„๋กœ ๊ฐœํ–‰ํ•˜๋„๋ก ๋ณ€๊ฒฝ

* refactor: ReviewerGroupGithubIds์˜ reviewerGithubIds๋ฅผ CascadeType.PERSIST๋กœ ๋ณ€๊ฒฝ

* chore: ๋‹ค๋ฅธ ์ž‘์—…์—์„œ ์ง„ํ–‰๋  ์‚ฌํ•ญ์œผ๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํ…Œ์ŠคํŠธ ์‚ญ์ œ

* [FE] Github Actions๋กœ CI ๊ตฌ์ถ• (#96)

* ci: CI๋ฅผ ์œ„ํ•œ yml ํŒŒ์ผ ์ž‘์„ฑ

* ci: yarn.lock ๊ฒฝ๋กœ ์ถ”๊ฐ€

* ci: working-directory ์ถ”๊ฐ€

* cI: ๋™์ž‘ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด push ๋ธŒ๋žœ์น˜ ๊ฒฝ๋กœ ์กฐ๊ฑด์—์„œ frontend ์ž„์‹œ ์ œ๊ฑฐ

* ci: ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด ํ˜„์žฌ ๋ธŒ๋žœ์น˜๋„ ์กฐ๊ฑด์— ์ถ”๊ฐ€

* ci: package์— test ๋ช…๋ น์–ด ์ถ”๊ฐ€

* ci: yarn.lock ํŒŒ์ผ ์—…๋ฐ์ดํŠธ

* ci: ํ…Œ์ŠคํŠธ ํŒŒ์ผ ํ˜•์‹ ์ˆ˜์ •

* chore: ํ•„์š”์—†๋Š” ํŒŒ์ผ ์‚ญ์ œ

* chore: svg ํŒŒ์ผ์„ ๋Œ€๋ฌธ์ž๋กœ importํ•œ ๊ฒƒ๋“ค ์†Œ๋ฌธ์ž๋กœ ์ˆ˜์ •

* ci: ์›นํŒฉ env ์„ค์ • ์—…๋ฐ์ดํŠธ

* ci: process.env ์‚ฌ์šฉ์„ ์œ„ํ•œ ํƒ€์ž… ์„ค์ •

* ci: env ์›นํŒฉ ์„ค์ • ๊ฒฝ๋กœ๋ฅผ ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋กœ ๋ณ€๊ฒฝ

* ci: env ์›นํŒฉ ์„ค์ • ๊ฒฝ๋กœ ์ˆ˜์ •

* ci: env ์ ˆ๋Œ€๊ฒฝ๋กœ ์ˆ˜์ •

* ci: ์ ˆ๋Œ€๊ฒฝ๋กœ ์ˆ˜์ • 2

* ci: ์ฝ๊ธฐ ๊ถŒํ•œ์„ ๋ช…์‹œ์ ์œผ๋กœ ์ฃผ๊ณ  ํ…Œ์ŠคํŠธ

* ci: dist ํŒŒ์ผ ํ…Œ์ŠคํŠธ

* ci: CI ํ™˜๊ฒฝ์—์„œ๋„ env ํŒŒ์ผ ์ƒ์„ฑ

* ci: ๋ฐฐํฌ ์ •์ƒ ๋™์ž‘ ํ™•์ธ์„ ์œ„ํ•œ github pages ์ž„์‹œ ๋ฐฐํฌ ์„ค์ •

* ci: ์ž„์‹œ ๋ฐฐํฌ ์ฝ”๋“œ ์‚ญ์ œ

* ci: develop ๋ธŒ๋žœ์น˜๋กœ frontend ์ดํ•˜ ๊ฒฝ๋กœ์—์„œ PR์ด ์˜ฌ๋ผ์˜ฌ ๋•Œ CI๊ฐ€ ์‹คํ–‰๋˜๋„๋ก ์ˆ˜์ •

* ci: node ์„ค์น˜ ์—๋Ÿฌ ํ•ด๊ฒฐ

* [BE] feat: ๋ฆฌ๋ทฐ์— ํ•„์š”ํ•œ ์ •๋ณด ์กฐํšŒ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ (#103)

* test: QuestionTestFixture ์ƒ์„ฑ

* feat: ๋ชจ๋“  ๋ฆฌ๋ทฐ ๋ฌธํ•ญ์„ ์กฐํšŒํ•˜๋Š” ๊ธฐ๋Šฅ ๊ตฌํ˜„

* feat: ๋ชจ๋“  ํ‚ค์›Œ๋“œ๋ฅผ ์กฐํšŒํ•˜๋Š” ๊ธฐ๋Šฅ ๊ตฌํ˜„

* test: ReviewerGroupFixture ์ƒ์„ฑ

* feat: ๋ฆฌ๋ทฐ ์ƒ์„ฑ ์‹œ ํ•„์š”ํ•œ ๋ฆฌ๋ทฐ์–ด ๊ทธ๋ฃน ์ •๋ณด๋ฅผ ์กฐํšŒํ•˜๋Š” ๊ธฐ๋Šฅ ๊ตฌํ˜„

* feat: ๋ฆฌ๋ทฐ ์ƒ์„ฑ ์‹œ ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์กฐํšŒํ•˜๋Š” ๊ธฐ๋Šฅ ๊ตฌํ˜„

* refactor: @ServiceTest ์ ์šฉ

* refactor: swagger ์ ์šฉ

* refactor: ํ•„๋“œ๋ช… ๋ณ€๊ฒฝ

* style: ๊ฐœํ–‰ ์ถ”๊ฐ€

* refactor: ๋‚ ์งœ ํ˜•์‹ ๋ณ€๊ฒฝ

* test: import๋ฌธ ์ œ๊ฑฐ

* refactor: ReviewCreationResponse ํŒจํ‚ค์ง€ ๋ณ€๊ฒฝ

* refactor: readOnly ํŠธ๋žœ์žญ์…˜ ์ ์šฉ

* fix: ๋ฆฌ๋ทฐ์–ด ์ค‘๋ณต ๊ฒ€์ฆ ์ž„์‹œ ์ œ๊ฑฐ

---------

Co-authored-by: donghoony <[email protected]>

* [FE] ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํŽ˜์ด์ง€์—์„œ MSW๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋ฒ„ mocking (#111)

* chore: ์ค‘๋ณต๋œ ์ธํ„ฐํŽ˜์ด์Šค ์ œ๊ฑฐ

* feat: MSW ํ•ธ๋“ค๋Ÿฌ ๋ฐ mock data ์ถ”๊ฐ€

* chore: ๋ฆฌ๋ทฐ ์“ฐ๊ธฐ ํŽ˜์ด์ง€ ๋ฐ์ดํ„ฐ endpoint ์ˆ˜์ •

* feat: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํŽ˜์ด์ง€์— msw๋ฅผ ์ ์šฉํ•˜์—ฌ ์„œ๋ฒ„ mocking

* merge

* [FE]  ๊ณตํ†ต ์ปดํฌ๋„ŒํŠธ์ธ ๋ชจ๋‹ฌ์„ ๋งŒ๋“ ๋‹ค. (#110)

* fix: stylelint๋ฅผ ํ†ตํ•œ css ์†์„ฑ ์ •๋ ฌ ๊ธฐ๋Šฅ ์˜ค๋ฅ˜ ์ˆ˜์ •

- stylelint ๋ฒ„์ „16๊ณผ ์ถฉ๋Œ๋˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ ์‚ญ์ œ : stylelint-config-prettier, stylelint-prettier
- css ์ •๋ ฌ์— ํ•„์š”ํ•˜์ง€ ์•Š์€ ํ”Œ๋Ÿฌ๊ทธ์ธ ์‚ญ์ œ : stylelint-config-standard, stylelint-config-styled-componented, stylelint-webpack-plugin
- ์ถ”๊ฐ€๋กœ ์„ค์น˜ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ: postcss-syntax, @stylelint/postcss-css-in-js
- stylelint ์ ์šฉ script ์ถ”๊ฐ€
- .stylelintrc.json ์ˆ˜์ • : css ๊ด€๋ จ rule ์„ค์ •

* refactor: stylelint ์ ์šฉ์— ๋”ฐ๋ฅธ css ์†์„ฑ ์ •๋ ฌ

* fix : ์ ˆ๋Œ€ ๊ฒฝ๋กœ ์‚ฌ์šฉ ์‹œ ์˜ค๋ฅ˜ ์ˆ˜์ •

์˜ค๋ฅ˜ : eslintimport/no-unresolved

* chore: eslintrc.cjs ์—์„œ ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ ์‚ญ์ œ

 node ํ™˜๊ฒฝ setting ์‚ญ์ œ

* style: eslint ์ ์šฉ์— ๋”ฐ๋ฅธ ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€ import ์ˆœ์„œ ์ •๋ฆฌ

* refactor: formatDate๋ฅผ utils/date ํŒŒ์ผ๋กœ ์ด๋™

* design: theme์— colors,, fontSize ๋ณ€๊ฒฝ ๋ฐ borderRadius ์ถ”๊ฐ€

* feat: MultilineTextViewer ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ

- ๊ฐœํ–‰์ด ํฌํ•จ๋œ string์— ๊ฐœํ–‰์„ ์ ์šฉํ•ด์„œ ๋ณด์—ฌ์ฃผ๋Š” ์ปดํฌ๋„ŒํŠธ

* feat: ๊นƒํ—ˆ๋ธŒ ์ €์žฅ์†Œ ์ด๋ฏธ์ง€ ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ

* feat: ๋ฆฌ๋ทฐ์™€ ๊ด€๋ จ๋œ ๋‚ ์งœ UI ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ

* featr: LockButton ์‚ญ์ œ LockToggle ์ถ”๊ฐ€

* refactor: ํ”ผ๊ทธ๋งˆ ๋””์ž์ธ ๋ณ€๊ฒฝ์— ๋”ฐ๋ฅธ ReviewDescription ๋ณ€๊ฒฝ

* feat: ReviewComment ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ

* refactor: ReviewViewSection -> ReviewSection ์œผ๋กœ ๋ณ€๊ฒฝ ๋ฐ ๋ฆฌํŒฉํ† ๋ง

- ๋ถˆํ•„์š”ํ•œ  ์ปดํฌ๋„ŒํŠธ ์‚ญ์ œ : RevieAnswer , ReviewQuestion

* refactor: DetailedReviewPage ๋ฆฌํŒฉํ† ๋ง

- ๋ชฉ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ
-  ์ถ”๊ฐ€ ๋ฐ ๋ณ€๊ฒฝ๋œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•ด ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€ ์ปดํฌ๋„ŒํŠธ(DetailedReviewPage) ๋ฆฌํŒฉํ† ๋ง
- DetailedReviewPage ํด๋”์˜ styles.ts ์‚ญ์ œ

* refactor: review์— ๋Œ€ํ•œ ํƒ€์ž… ๋ณ€๊ฒฝ

* design : ReviewDate์˜ ํด๋ก  ์Šคํƒ€์ผ ์ ์šฉ

* feat: KeywordSection ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ

- ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€ ํ‚ค์›Œ๋“œ ๋ถ€๋ถ„ ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ

* feat: ReviewSectionHeader ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ ๋ฐ ์ ์šฉ

- ๋ฆฌ๋ทฐ ์ƒ์„ธ๋ณด๊ธฐ์—์„œ ๋ฐ˜๋ณต๋˜๋Š” ์งˆ๋ฌธ,ํ‚ค์›Œ๋“œ ํ—ค๋”๋ถ€๋ถ„์„ ์ปดํฌ๋„ŒํŠธ๋กœ ๋ถ„๋ฆฌ

* design : ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€์— width ๋ณ€๊ฒฝ

* refactor: DetailedReview์˜ ๋ชฉ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ๋ฐ ๋ฆฌํŒฉํ† ๋ง

- ํƒ€์ž… ๋ณ€๊ฒฝ์— ๋”ฐ๋ฅธ ๋ชฉ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ
- KeywordSection ์ ์šฉ

* design : formWidth๋ฅผ theme์— ์ถ”๊ฐ€ ๋ฐ ๋ฆฌ๋ทฐ ์ž‘์„ฑ/๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€์— ์ ์šฉ

* fix: Layout์—์„œ ๊ฐ€๋กœ ์Šคํฌ๋กค ์ƒ๊ธฐ๋Š” ์˜ค๋ฅ˜ ์ˆ˜์ •

- 100vw๋Š” ์Šคํฌ๋กค์„ ํฌํ•จํ•œ ๋ทฐํฌํŠธ ๋„ˆ๋น„๋ผ์„œ 100%์œผ๋กœ ์ˆ˜์ •

* feat: ๋ฆฌ๋ทฐ ์ƒํŽ˜์ด์ง€ router์— ๋ผ์šฐํ„ฐ ํŒŒ๋ผ๋ฏธํ„ฐ ์ ์šฉ ๋ฐ ๊ด€๋ จ ์„ค์ • ๋ณ€๊ฒฝ

- ๋ฐ๋ชจ๋ฐ์ด๋ฅผ ์œ„ํ•ด ํ˜„์žฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์žˆ๋Š” ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€ id๋ฅผ sidebar์˜ ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€ ๋ฉ”๋‰ด link์— ์ ์šฉ
- ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€(DetailedReviewPage)์˜ api ํ•ธ๋“ค๋Ÿฌ ์ˆ˜์ •

* docs: ๋ณ€์ˆ˜๋ช… ๋ณ€๊ฒฝ (isLock -> isPublic)

* refactor: ๊นƒํ—™ ์ €์žฅ์†Œ ๋กœ๊ณ  ์ฃผ์†Œ ๋ณ€์ˆ˜๋ช… ๋ณ€๊ฒฝ

- projectImgSrc -> thumbnailUrl

* ci: msw ๊ด€๋ จ ํŒจํ‚ค์ง€ ์„ค์น˜

* ci: msw ๊ด€๋ จ ์„ค์ •ํŒŒ์ผ ์ถ”๊ฐ€

- ๋ธŒ๋ผ์šฐ์ € ํ™˜๊ฒฝ, node ํ™˜๊ฒฝ์—์„œ msw๋กœ ๋ชฉ์„œ๋ฒ„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ด€๋ จ ํŒŒ์ผ ์ถ”๊ฐ€

* feat: mock ํ•ธ๋“ค๋Ÿฌ ์ถ”๊ฐ€ ๋ฐ ์ƒ์„ธ ๋ฆฌ๋ทฐ ํŽ˜์ด์ง€ ๋ชฉ ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€

* feat:  root์—์„œ ๋ชฉ์„œ๋ฒ„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋กํ•จ

* refactor: endpoint ์ˆ˜์ •

- env ์—์„œ ์„œ๋ฒ„ ์ฃผ์†Œ ๋์— ์Šฌ๋ž˜์‹œ ๋„ฃ๋Š” ๊ฒƒ์œผ๋กœ ํ†ต์ผ

* feat: ์ƒ์„ธ ๋ฆฌ๋ทฐ ํŽ˜์ด์ง€(detailedReviewPage)์— ๋ชฉ์„œ๋ฒ„ ์—ฐ๊ฒฐ ๋ฐ ๊ด€๋ จ ์ฝ”๋“œ ์ˆ˜์ •

- ์ƒํƒœ๋ช… ๋ณ€๊ฒฝ: detailReview -> detailedReview
- detailedReview ํƒ€์ž…์— null ์ถ”๊ฐ€ ๋ฐ ๊ทธ์— ๋”ฐ๋ฅธ ์˜ค๋ฅ˜ ํ•ธ๋“ค๋ง ์ถ”๊ฐ€
- deadline์— string ํƒ€์ž…์œผ๋กœ response๋กœ ์ „๋‹ฌ๋˜์–ด์„œ new Date๋กœ ๊ฐ์‹ธ์„œ props๋กœ ์ „๋‹ฌ

* docs: indexhtml์˜ title ๋ณ€๊ฒฝ

* style: apis/review.ts ์˜ import ๊ด€๋ จ eslint rule ์ ์šฉ์— ๋”ฐ๋ฅธ ์ˆ˜์ •

* fix: ts์—์„œ process ์ฝ์ง€ ๋ชปํ•˜๋Š” ์˜ค๋ฅ˜ ์ˆ˜์ •

* fix: webpack dev server script ๋ณต์›

* feat: ModalPortal ์…์„ฑ

* feat: SideModal ์ปดํฌ๋„ŒํŠธ, useSide  ์…์„ฑ ๋ฐ Sidebar์— ์ ์šฉ

* feat: ModalBackground ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ ๋ฐ ์ ์šฉ

* fix: ๋ชจ๋‹ฌ ์—ด๋ฆด ๋•Œ ์Šคํฌ๋กค๋ฐ” ๋ง‰๋Š” ๊ธฐ๋Šฅ ์˜ค๋ฅ˜ ์ˆ˜์ •

* design : ModalPortal ์‚ฌ์ด์ฆˆ ๋‹จ์œ„ ๋ณ€๊ฒฝ (% -> vw, vh)

* feat: Button ์ปดํฌ๋„ŒํŠธ๊ฐ€ button ์†์„ฑ์„ props๋กœ ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก ์ˆ˜์ •

* feat: ConfirmModal ์ƒ์„ฑ

* refactor: index.tsx์—์„œ ๋ชจ๋‹ฌ์„ ๊บผ๋‚ผ ์ˆ˜ ์žˆ๋„๋ก ๋ฆฌํŒฉํ† ๋ง

* refactor: PropsWithChildren ์ˆ˜์ •

- PropsWithChildren๋ฅผ import ํ•˜์ง€ ์•Š๊ณ  React์—์„œ ๋ฐ”๋กœ ์“ธ ์ˆ˜ ์žˆ๋„๋ก React.PropsWithChildren๋กœ  ์ˆ˜์ •

* [FE] msw๊ด€๋ จ env ์˜ค๋ฅ˜ ํ•ด๊ฒฐ  (#114)

* chore: fe/feat/105-review-writing-msw  ์˜  endpoint ๊ด€๋ จ ๋ณ€๊ฒฝ์‚ฌํ•ญ ๋ฐ˜์˜

* fix: NODE_ENV ๊ด€๋ จ ์˜ค๋ฅ˜ ์ˆ˜์ •

- ์˜ค๋ฅ˜ : env ํŒŒ์ผ์— NODE_ENV๊ฐ€ ์—†์Œ์—๋„ ์ด๋ฅผ ์ธ์‹ํ•˜๋Š” ์˜ค๋ฅ˜ ๋ฐœ์ƒ
- ์›์ธ: ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ NODE_ENV๋ฅผ ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๋‹ค๊ณ  ํ•จ
- ํ•ด๊ฒฐ: NODE_ENV๋ฅผ ์‚ญ์ œํ•˜๊ณ  MSW๋ฅผ ์‚ฌ์šฉ

* [BE] feat: ๋‚ด๊ฐ€ ๋ฐ›์€ ๋ฆฌ๋ทฐ ๋ณด๊ธฐ ๊ธฐ๋Šฅ ๊ตฌํ˜„ (#109)

* refactor: contains ์ž‘๋™์„ ์œ„ํ•œ EqualsAndHashcode ์ถ”๊ฐ€

* fix: lazyInitialization ํ•ด๊ฒฐ

* feat: ์งˆ๋ฌธ ๋ ˆํฌ์ง€ํ† ๋ฆฌ ์ƒ์„ฑ

* feat: ๋‚ด๊ฐ€ ๋ฐ›์€ ๋ฆฌ๋ทฐ ์‘๋‹ต ์ƒ์„ฑ

* refactor: ๋ฆฌ๋ทฐ ํ•ญ๋ชฉ๊ณผ ์งˆ๋ฌธ์˜ ์—ฐ๊ด€๊ด€๊ณ„ ๋ณ€๊ฒฝ ๋ฐ ๋‹ต๋ณ€ ์ตœ๋Œ€ ๊ธ€์ž์ˆ˜ DB์— ๋ฐ˜์˜

* refactor: ๋ฆฌ๋ทฐ์— ๋ฆฌ๋ทฐ๊ทธ๋ฃน ์ดˆ๊ธฐํ™” ๋ถ€๋ถ„ ์ถ”๊ฐ€

* feat: ๋‚ด๊ฐ€ ๋ฐ›์€ ๋ฆฌ๋ทฐ ์กฐํšŒ ๊ธฐ๋Šฅ ๊ตฌํ˜„

* feat: ๋ฐ›์€ ๋ฆฌ๋ทฐ๊ฐ€ ์—†์„ ๋•Œ์˜ ์‘๋‹ต ์ถ”๊ฐ€

* refactor: dto ์„ค๋ช… ์ถ”๊ฐ€

* refactor: dto ์„ค๋ช… ์ˆ˜์ •

* refactor: ์ธ์ž ํ˜•์‹ ์ˆ˜์ •, ๊ฐœํ–‰ ์ˆ˜์ •

* refactor: transactional ์–ด๋…ธํ…Œ์ด์…˜ ์ถ”๊ฐ€

* refactor: ๋‚ด๊ฐ€ ๋ฐ›์€ ๋ฆฌ๋ทฐ ์กฐํšŒํ•  ๋•ŒPage๊ฐ์ฒด ๋ง๊ณ  List๋กœ ๋ฐ›์•„์˜ค๋„๋ก ์ˆ˜์ •

* refactor: ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๋งŒ๋“œ๋Š” ๊ธฐ๋Šฅ ๋„๋ฉ”์ธ ์•ˆ์œผ๋กœ ์ด๋™

* test: ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ๊ฐœ์„ 

- ๋ณ€์ˆ˜๋ช… ์ˆ˜์ •, save ์—ฌ๋Ÿฌ๊ฐœ ๋Œ€์‹  saveAll ์‚ฌ์šฉ ๋“ฑ

* refactor: ๋งˆ์ง€๋ง‰์œผ๋กœ ๋ณธ ๋ฆฌ๋ทฐID๊ฐ€ ์—†๋Š” ๋กœ์ง์— ๋Œ€ํ•ด ์ˆ˜์ •

- lastViewedReviewId๋ฅผ ์ž…๋ ฅํ•˜์ง€ ์•Š์œผ๋ฉด 999๊ฐ™์ด ์ด์ƒํ•˜๊ฒŒ ํฐ ์ˆ˜๋ฅผ ๋„ฃ์–ด์ฃผ๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ, ๊ฐ€์žฅ ํฐ ๊ฐ’์„ ๋„ฃ์–ด์ฃผ๋„๋ก ์ˆ˜์ •

* docs: ์Šค์›จ๊ฑฐ ๋ฐ์ฝ”๋ ˆ์ด์…˜ ์ ์šฉ

* refactor: lastReviewId๊ฐ€ null ์ด์–ด๋„ ๊ฐ€์žฅ ์ตœ์‹  ๋ฆฌ๋ทฐ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋„๋ก ์ˆ˜์ •

* refactor: eqaulsAndHashCode ์žฌ์ •์˜

* refactor: eqaulsAndHashCode ์žฌ์žฌ์ •์˜

* refactor: API Docs ๋ฐ˜์˜

---------

Co-authored-by: donghoony <[email protected]>

* fix: ์ž˜๋ชป ์ •์˜๋œ endpoint ์ˆ˜์ • (#118)

* [FE] ๋จธ์ง€๋กœ ์ธํ•ด ์‚ฌ๋ผ์ง„ ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ ๋ณต๊ตฌ ๋ฐ ๋ฐ์ดํ„ฐ ํƒ€์ž… ๋ณ€๊ฒฝ (#121)

* refactor: ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€ ๋ฐ์ดํ„ฐ ํƒ€์ž… ๋ณ€๊ฒฝ ๋ฐ Keyword ํƒ€์ž… ๋ณต๊ตฌ

* fix: ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€์˜ path ๋ณต๊ตฌ

* fix: ์‚ฌ์ด๋“œ๋ฐ”์˜ ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€ ๊ฒฝ๋กœ ๋ณต๊ตฌ

* refactor: ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€ ๋ฐ์ดํ„ฐ ํƒ€์ž… ๋ณ€๊ฒฝ์— ๋”ฐ๋ฅธ ๋ชฉ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ

* fix: DetailedReviewPage ๋ณต๊ตฌ ๋ฐ ๋ฐ์ดํ„ฐ ํƒ€์ž… ๋ณ€๊ฒฝ์— ๋”ฐ๋ฅธ ์ˆ˜์ •

* [BE] ๋”๋ฏธ ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€, local ํ”„๋กœํŒŒ์ผ ๊ด€๋ฆฌ (#123)

* refactor: Unauthorized ์˜ˆ์™ธ ์ฒ˜๋ฆฌ

* chore: ๋”๋ฏธ ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€ ๋ฐ Profile ์ฒ˜๋ฆฌ

* chore: ํ…Œ์ŠคํŠธ yml ์ƒ์„ฑ

* fix: Long notblank -> notnull (#126)

* [FE] ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํŽ˜์ด์ง€์—์„œ msw๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจํ‚น (#124)

* feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํŽ˜์ด์ง€์—์„œ msw๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจํ‚น

Co-Authored-By: badahertz52 <[email protected]>
Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: Fe <[email protected]>

* chore: ์—”๋“œํฌ์ธํŠธ baseurl์— '/' ์ถ”๊ฐ€

Co-Authored-By: badahertz52 <[email protected]>
Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: Fe <[email protected]>

---------

Co-authored-by: badahertz52 <[email protected]>
Co-authored-by: ImxYJL <[email protected]>
Co-authored-by: Fe <[email protected]>

* fix: ๋ฆฌ๋ทฐ ๋ชฉ๋ก DTO ํ•„๋“œ ์ˆ˜์ • (#129)

* [FE] msw ๋ชจํ‚น์„ ์œ„ํ•œ ๋ฆฌ๋ทฐ ๋ฐ์ดํ„ฐ ํ•˜๋“œ์ฝ”๋”ฉ (#130)

* refactor: msw ๋ชจํ‚น์„ ์œ„ํ•œ ๋ฆฌ๋ทฐ ๋ฐ์ดํ„ฐ ํ•˜๋“œ์ฝ”๋”ฉ

Co-Authored-By: ImxYJL <[email protected]>

* refactor: 2์ฐจ ๋ฐ๋ชจ๋ฐ์ด๋ฅผ ์œ„ํ•œ ๋ฉค๋ฒ„ ์•„์ด๋”” ์ƒ์ˆ˜ํ™”

Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: badahertz52 <[email protected]>
Co-Authored-By: Fe <[email protected]>

* chore: ๋ถˆํ•„์š”ํ•œ ์ฝ˜์†” ๋กœ๊ทธ ์ œ๊ฑฐ

Co-Authored-By: ImxYJL <[email protected]>
Co-Authored-By: badahertz52 <[email protected]>
Co-Authored-By: Fe <[email protected]>

---------

Co-authored-by: ImxYJL <[email protected]>
Co-authored-by: badahertz52 <[email protected]>
Co-authored-by: Fe <[email protected]>

* [FE] endPoint ์˜ค๋ฅ˜์™€ ๋ฆฌ๋ทฐ ๊ทธ๋ฃน ์•„์ด๋”” ์ˆ˜์ • (#132)

* fix: endpoint ์˜ค๋ฅ˜ ์ˆ˜์ •

* fix: ๋ฆฌ๋ทฐ ์ƒ์„ฑ์„ ์œ„ํ•œ ๋ฐ์ดํ„ฐ ๋ฐ›์„ ๋•Œ์˜ ๋ฆฌ๋ทฐ ๊ทธ๋ฃน ์•„์ด๋””๋ฅผ 1๋กœ ์ˆ˜์ •

* [BE] fix: ๋ฆฌ๋ทฐ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ ์ƒ์„ฑ ๊ธฐ๋Šฅ ์ˆ˜์ • (#134)

* fix: src/index.tsx์—์„œ enableMocking ์ œ๊ฑฐ (#136)

* [FE] Children ์†์„ฑ์ด ํ•„์ˆ˜์ธ ํƒ€์ž… ์ œ์ž‘ (#147)

* feat: children ์†์„ฑ์ด ํ•„์ˆ˜์ธ EssentialPropsWithChildren ํƒ€์ž… ์ƒ์„ฑ

* chore: types ํด๋”์˜ index ํŒŒ์ผ์— ๋ˆ„๋ฝ๋๋˜ export๋“ค ์ถ”๊ฐ€ ๋ฐ ๊ทธ์— ๋”ฐ๋ฅธ types import๋ฌธ ๊ฒฝ๋กœ ์ˆ˜์ •

* [FE] ์‚ฌ์ด๋“œ๋ฐ” ๋ฐ ๋ชจ๋‹ฌ ์‚ฌ์šฉ์„ฑ ๊ฐœ์„  (#139)

* refactor: ์‚ฌ์ด๋“œ๋ฐ”๋ฅผ ๋‹ซ๋Š” ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ œ๊ฑฐ

* refactor: ์‚ฌ์ด๋“œ๋ฐ”๊ฐ€ ๋” ๋นจ๋ฆฌ ์—ด๋ฆฌ๋„๋ก ์ˆ˜์ •

* feat: ๋ชจ๋‹ฌ์˜ ๋ฐฐ๊ฒฝ ํด๋ฆญ ๋ฐ esc ํ‚ค๋ฅผ ๋ˆŒ๋ €์„ ๋•Œ ๋ชจ๋‹ฌ์ด ๋‹ซํžˆ๋Š” ๊ธฐ๋Šฅ ์ถ”๊ฐ€

* chore: hooks index์— useModalClose ์ถ”๊ฐ€

* feat: ์‚ฌ์ด๋“œ๋ฐ” ๋ฆฌ์ŠคํŠธ ์•„์ดํ…œ์„ ํด๋ฆญํ–ˆ์„ ๋•Œ ์‚ฌ์ด๋“œ๋ฐ”๊ฐ€ ๋‹ซํžˆ๋Š” ๊ธฐ๋Šฅ ์ถ”๊ฐ€

* refactor: useModalClose ํ›…์„ ๋ชจ๋“  ๋ชจ๋‹ฌ์˜ ๊ณตํ†ต ์ตœ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ์ธ ModalBackground์—์„œ ์ฒ˜๋ฆฌํ•˜๋„๋ก ์ˆ˜์ •

* refactor: ModalBackground๋ฅผ ํด๋ฆญํ–ˆ์„ ๋•Œ ๋ชจ๋‹ฌ์ด ๋‹ซํžˆ๊ฒŒ ํ•˜๋Š” ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ๋ฅผ document ๋Œ€์‹  Background์— ์ถ”๊ฐ€

* fix: esc๋ฅผ ์‚ฌ์šฉํ•ด ๋ชจ๋‹ฌ์„ ๋‹ซ์•˜์„ ๋•Œ ํ–„๋ฒ„๊ฑฐ ๋ฒ„ํŠผ์— ํฌ์ปค์Šค๊ฐ€ ์ƒ๊ธฐ๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ ๋ฐ ๋ณ€์ˆ˜๋ช… ๋Œ€์†Œ๋ฌธ์ž ์ˆ˜์ •

* refactor: useEffect ๋‚ด๋ถ€ ํ•จ์ˆ˜๋“ค์„ ํ›… ์™ธ๋ถ€๋กœ ์ด๋™ ๋ฐ ์ฃผ์„ ์ถ”๊ฐ€

* [FE] ์กด์žฌํ•˜์ง€ ์•Š๋Š” element์— ๋Œ€ํ•œ ์—๋Ÿฌ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ์œ ํ‹ธ๋ฆฌํ‹ฐ ํ•จ์ˆ˜ ์ œ์ž‘ (#150)

* feat: ์กด์žฌํ•˜์ง€ ์•Š๋Š” element์— ๋Œ€ํ•œ ์—๋Ÿฌ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ํ›… ์ œ์ž‘

* chore: hooks ํด๋” index์— useExistentElement ์ถ”๊ฐ€

* refactor: useExistentElement ํ›…์„ ๋”์šฑ ๋ฒ”์šฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ˆ˜์ •

* refactor: ์กด์žฌํ•˜์ง€ ์•Š๋Š” ์š”์†Œ๋ฅผ ํŒ๋ณ„ํ•˜๋Š” ๋™์ž‘์„ ์ปค์Šคํ…€ ํ›… ๋Œ€์‹  ์œ ํ‹ธ๋ฆฌํ‹ฐ ํ•จ์ˆ˜๋กœ ์ œ์ž‘

* chore: ๊ธฐ์กด์˜ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ์š”์†Œ๋ฅผ ํƒ์ง€ํ•˜๋Š” ์ปค์Šคํ…€ ํ›… ์‚ญ์ œ

* [FE] HTTP ์š”์ฒญ ์˜ค๋ฅ˜ ์‹œ status code๋ณ„ ์˜ค๋ฅ˜ ์ƒํ™ฉ์„ ๋Œ€์‘ํ•˜๋Š” ํ•จ์ˆ˜ ์ƒ์„ฑ (#151)

* feat: api ์—๋Ÿฌ ์‹œ ํ‘œ์‹œํ•œ ๋ฉ”์„ธ์ง€ ์ƒ์„ฑ ํ•จ์ˆ˜ ์ถ”๊ฐ€

* refactor: api/review.ts์— api ์˜ค๋ฅ˜ ์‹œ ๋ฉ”์„ธ์ง€๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” createApiErrorMessage ํ•จ์ˆ˜ ์ ์šฉ

* docs: http ์š”์ฒญ ์‹คํŒจ ๋ฉ”์„ธ์ง€ ์ˆ˜์ •

* fix: ์˜คํƒ€ ์ˆ˜์ •

* [FE] ํŽ˜์ด์ง€ ์ƒ๋‹จ ์ด๋™ ๋ฒ„ํŠผ ๊ตฌํ˜„ (#153)

* feat: top button ๋กœ์ง ํ›…์œผ๋กœ ๊ตฌํ˜„

* design: top button UI ๊ตฌํ˜„

* chore: ๊ฐ ํŽ˜์ด์ง€๋งˆ๋‹ค top button์ด ๋ณด์—ฌ์ง€๋„๋ก ์„ค์ •

* chore: ์ปดํฌ๋„ŒํŠธ default๋กœ exportํ•˜๋„๋ก ์„ค์ •

* refactor: handler๋ฅผ useEffect ์™ธ๋ถ€๋กœ ๋ถ„๋ฆฌ

* chore: svg import ์ปจ๋ฒค์…˜์— ๋งž์ถ”์–ด ์ด๋ฆ„ ์ˆ˜์ •

* [FE] feat: ์—๋Ÿฌ, ๋กœ๋”ฉ ํŽ˜์ด์ง€ ๊ตฌํ˜„ ๋ฐ ์ ์šฉ (#155)

* feat: ๋ฒ„ํŠผ ์ปดํฌ๋„ŒํŠธ์— ์•„์ด์ฝ˜์„ ์„ ํƒ์ ์œผ๋กœ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ณ€๊ฒฝ

- `icon` prop์„ ํ†ตํ•ด ๋ฒ„ํŠผ์— ์•„์ด์ฝ˜์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ณ€๊ฒฝ

* feat: ์—๋Ÿฌ ํŽ˜์ด์ง€๋ฅผ ์œ„ํ•œ ErrorSection ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„

- ์—๋Ÿฌ ๋กœ๊ณ , ๋ฉ”์‹œ์ง€, ์ƒˆ๋กœ๊ณ ์นจ ๋ฐ ํ™ˆ ์ด๋™ ๋ฒ„ํŠผ ์ œ๊ณต

* feat: ๋ผ์šฐํ„ฐ ์„ค์ •์—์„œ `errorElement`์— `ErrorPage` ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ถ”๊ฐ€

* feat: ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ ์ƒˆ๋กœ๊ณ ์นจ ๋ฐ ํ™ˆ ์ด๋™ ๊ธฐ๋Šฅ ์ถ”๊ฐ€

* feat: LoadingBar ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„

* feat: ๋กœ๋”ฉ ํŽ˜์ด์ง€ ์ถ”๊ฐ€ ๋ฐ ์ ์šฉ

- ๋กœ๋”ฉ ๋ฉ”์‹œ์ง€ ์ถ”๊ฐ€
- ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํŽ˜์ด์ง€, ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํŽ˜์ด์ง€, ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€์— ๋กœ๋”ฉ ํŽ˜์ด์ง€ ์ ์šฉ

* refactor: buttons ๋ฐฐ์—ด์„ ํ†ตํ•ด ๋ฒ„ํŠผ ์ƒ์„ฑ

* refactor: ์ฝ”๋“œ์ปจ๋ฒค์…˜์— ๋งž๊ฒŒ ์ฝ”๋“œ ์ˆ˜์ • ๋ฐ imageDescription์„ ๋ฒ„ํŠผ props์— ์ถ”๊ฐ€

* refactor: boolean ํƒ€์ž…์ถ”๋ก  ์ œ๊ฑฐ

* design: ์—๋Ÿฌ ์ปดํฌ๋„ŒํŠธ ํ™”๋ฉด ๊ฐ€์šด๋ฐ ๋ฐฐ์น˜

* design: ๋กœ๋”ฉ ์ปดํฌ๋„ŒํŠธ ํ™”๋ฉด ๊ฐ€์šด๋ฐ ๋ฐฐ์น˜

* [BE] refactor: ๋„๋ฉ”์ธ ์—ฐ๊ด€ ๊ด€๊ณ„ ์žฌ์ •์˜ (#156)

* refactor: ๋„๋ฉ”์ธ ์—ฐ๊ด€๊ด€๊ณ„ ์žฌ์ •์˜ ๋ฐ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋„๋ฉ”์ธ ์‚ญ์ œ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* test: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํ…Œ์ŠคํŠธ ์‚ญ์ œ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* fix: ์˜ˆ์•ฝ์–ด ์‚ฌ์šฉํ•˜์ง€ ์•Š๋„๋ก ์ˆ˜์ •

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* refactor: Review ๋„๋ฉ”์ธ์—์„œ reviewee ํ•„๋“œ ์ œ๊ฑฐ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* refactor: ๋ฆฌ๋ทฐ ์ €์žฅ ๊ธฐ๋Šฅ ๊ตฌํ˜„

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* refactor: ํ‚ค์›Œ๋“œ ์ €์žฅ ๊ธฐ๋Šฅ ๊ตฌํ˜„

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* refactor: ๋ฆฌ๋ทฐ ์ƒ์„ฑ ์š”์ฒญ ๊ฐ์ฒด ๊ตฌํ˜„

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* test: ๋ฆฌ๋ทฐ, ๋ฆฌ๋ทฐ ๋‚ด์šฉ ๋„๋ฉ”์ธ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* refactor: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ์‹œ ์งˆ๋ฌธ ๊ฒ€์ฆ

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* fix: Review์˜ reviewGroupId ์ปฌ๋Ÿผ๋ช… ์ˆ˜์ •

* refactor: ๋ฆฌ๋ทฐ ์ƒ์„ฑ ์‹œ, ํ‚ค์›Œ๋“œ ๊ฒ€์ฆ์„ ๊ฐ์ฒด ๋ถ„๋ฆฌ

* refactor: ๋ฆฌ๋ทฐ ์ƒ์„ฑ ์‹œ, ์งˆ๋ฌธ ๊ฒ€์ฆ์„ ๊ฐ์ฒด ๋ถ„๋ฆฌ

* style: ์ฝ”๋“œ ์žฌ์ •๋ ฌ

* test: ๋ฆฌ๋ทฐ ์ƒ์„ฑ ๊ฒ€์ฆ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

* refactor: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํด๋ž˜์Šค ์‚ญ์ œ

* refactor: keyword ๊ด€๋ จ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํด๋ž˜์Šค ์‚ญ์ œ

* refactor: review ๊ด€๋ จ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํด๋ž˜์Šค ์‚ญ์ œ

* refactor: ๋ฐ์ดํ„ฐ ์ดˆ๊ธฐํ™” ๊ฐ์ฒด ์ˆ˜์ •

* test: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํ…Œ์ŠคํŠธ ์‚ญ์ œ

* refactor: ์˜ˆ์™ธ ๋ฉ”์„ธ์ง€ ๋งํˆฌ ํ†ต์ผ

* refactor: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์˜ˆ์™ธ ์ œ๊ฑฐ

* refactor: ์˜ˆ์™ธ ํด๋ž˜์Šค ํŒจํ‚ค์ง€ ๋ณ€๊ฒฝ

* refactor: NOT NULL ์ œ์•ฝ์กฐ๊ฑด ์ถ”๊ฐ€

* refactor: ํ…Œ์ŠคํŠธ์—์„œ๋งŒ ์‚ฌ์šฉ๋˜๋Š” ํ•จ์ˆ˜ ์ œ๊ฑฐ

* refactor: ํ…Œ์ŠคํŠธ ์‹คํ–‰ ์‹œ ๋ฐœ์ƒํ•˜๋Š” LazyInitializationException ํ•ด๊ฒฐ

* refactor: ํ‚ค์›Œ๋“œ ๊ฒ€์ฆ ํ•จ์ˆ˜ ์ˆœ์„œ ๋ณ€๊ฒฝ

* chore: ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ปจ๋ฒค์…˜ ํ†ต์ผ

* refactor: reviewRequestCode ๊ฒ€์ฆ ๋กœ์ง ์ด๋™

* refactor: ํ•„๋“œ์ธ questionRepository๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ๋ณ€๊ฒฝ

* refactor: ๋ฆฌ๋ทฐ์ด, ํ”„๋กœ์ ํŠธ ์ด๋ฆ„ ๊ธธ์ด ๊ฒ€์ฆ ํ•จ์ˆ˜ ๋ถ„๋ฆฌ

* test: ๋ฆฌ๋ทฐ ์ €์žฅ ์‹œ reviewKeywor ์ €์žฅ ๊ฒ€์ฆ ์ถ”๊ฐ€

---------

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: Kimprodp <[email protected]>

* [All] infra: ๋””์Šค์ฝ”๋“œ ์›นํ›… ์‚ฌ์šฉํ•ด PR ์ƒ์„ฑ/์ฝ”๋ฉ˜ํŠธ ์‹œ ๋ฉ˜์…˜ (#169)

* feat: PR Request ์ƒ์„ฑ / Comment ์‹œ ๋””์Šค์ฝ”๋“œ ๋ฉ˜์…˜

* fix: Case-sensitive ID๋กœ ํ•ด๊ฒฐ, ALL webhook ์ถ”๊ฐ€

* fix: remove whitespace

* chore: rename workflow

* fix: fix shell script

* fix: step statement

* fix: remove trailing whitespace after equals sign

* [BE] feat: ๋ฆฌ๋ทฐ ๊ทธ๋ฃน ์ƒ์„ฑ API ๊ตฌํ˜„ (#163)

* feat: ๋žœ๋คํ•œ ๋ฌธ์ž์—ด ์ƒ์„ฑ๊ธฐ ๊ตฌํ˜„

Co-authored-by: donghoony <[email protected]>

* feat: ๋ฆฌ๋ทฐ ๊ทธ๋ฃน ์ƒ์„ฑ ์š”์ฒญ, ์‘๋‹ต ํ˜•์‹

Co-authored-by: donghoony <[email protected]>

* feat: ๋ฆฌ๋ทฐ ๊ทธ๋ฃน ์ƒ์„ฑ

Co-authored-by: hyeonjilee <[email protected]>
Co-authored-by: nayonsoso <[email protected]>

* feat: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ์ปจํŠธ๋กค๋Ÿฌ

Co-authored-by: hyeonjilee <[email protected]>
Co-authored-by: nayonsoso <[email protected]>

---------

Co-authored-by: nayonsoso <[email protected]>
Co-authored-by: hyeonjilee <[email protected]>

* [BE] refactor: ๋ฆฌ๋ทฐ ์ž‘์„ฑ์„ ์œ„ํ•œ ์ •๋ณด ์š”์ฒญ ๊ธฐ๋Šฅ ๋ฆฌํŒฉํ„ฐ๋ง (#162)

* refactor: ๋ถˆํ•„์š”ํ•œ update ๋ฐฉ์ง€

* feat: controller์— ๋ฆฌ๋ทฐ ์ƒ์„ฑ ์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต ๊ธฐ๋Šฅ ๊ตฌํ˜„

* feat: controller์— ๋ฆฌ๋ทฐ ์ž‘์„ฑ์„ ์œ„ํ•ด ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์‘๋‹ต ๊ธฐ๋Šฅ ๊ตฌํ˜„

* feat: service์— ๋ฆฌ๋ทฐ ์ž‘์„ฑ์„ ์œ„ํ•ด ํ•„์š”ํ•œ ์ •๋ณด ์กฐํšŒ
 ๊ธฐ๋Šฅ ๊ตฌํ˜„

* chore: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” dto ์‚ญ์ œ

* test: ๋ฆฌ๋ทฐ ๋ฆฌ๋ทฐ ์ž‘์„ฑ์„ ์œ„ํ•ด ํ•„์š”ํ•œ ์ •๋ณด ์กฐํšŒ ๊ธฐ๋Šฅ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ

* refactor: swagger ์„ค์ • ์ผ๋ถ€ ์ˆ˜์ • ๋ฐ ์—๋Ÿฌ ์‘๋‹ต์ฝ”๋“œ ๋…ธ์ถœ๋˜๋„๋ก ๋ณ€๊ฒฝ

* refactor: service์—์„œ ์›์‹œํƒ€์ž… long์„ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ๋ณ€๊ฒฝ

* docs: api ๋ฌธ์„œ dto ํ•ญ๋ชฉ์„ค๋ช… ๋ณ€๊ฒฝ

* test: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ณ€์ˆ˜ ์„ ์–ธํ•˜์ง€ ์•Š๋„๋ก ๋ณ€๊ฒฝ

* docs: api ๋ฌธ์„œ ๊ฒ€์ฆ ๋‚ด์šฉ์— ๋Œ€ํ•œ ์–ด์ฒด ๋ณ€๊ฒฝ

* refactor: ํŠธ๋žœ์žญ์…˜ ์กฐํšŒ ๋ช…์‹œ ์ถ”๊ฐ€

* refactor: dto ์ด๋ฆ„ ๋ณ€๊ฒฝ

* [FE] ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€์— react-query ์ถ”๊ฐ€ ๋ฐ ๋ฆฌํŒฉํ† ๋ง (#161)

* fix: src/index.tsx์—์„œ enableMocking ์ œ๊ฑฐ

* feat: ๋ฆฌ๋ทฐ ๊ทธ๋ฃน ์ƒ์„ฑ ์‹œ ์ฝ”๋ฉ˜ํŠธ ์ปดํฌ๋„ŒํŠธ๋ช… ๋ณ€๊ฒฝ ๋ฐ ๊ธฐ๋ณธ๊ฐ’ ์„ค์ •

- ์ปดํฌ๋„ŒํŠธ๋ช… ๋ณ€๊ฒฝ: RevewComment -> ReveweeComments
-  reviewGroup์˜ description์ด ๋นˆ๋ฌธ์ž์—ด์ด๋ฉด ๊ธฐ๋ณธ๊ฐ’์„ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒƒ์œผ๋กœ ๋ณ€๊ฒฝ

* refactor: ์„œ๋ฒ„ DB์— ์žˆ๋Š” ๋ฆฌ๋ทฐ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ์ƒ์ˆ˜ํ™”

- ํ˜„์žฌ DB์— ์žˆ๋Š” ๋ฆฌ๋ทฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชฉ ์„œ๋ฒ„์—์„œ๋„ ์‚ฌ์šฉํ•˜๊ณ , ์‚ฌ์ด๋“œ๋ฐ” ํŽ˜์ด์ง€ ์ด๋™ ์‹œ์—๋„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ด€๋ จ value๋“ค์„ ์ƒ์ˆ˜ํ™” ํ•จ

* feat : QueryClient, QueryClientProvider ์ ์šฉ

- src/index.tsx์— QueryClient, QueryClientProvider ์ ์šฉ

* fix: dependencies์— ์žˆ๋Š” ํ…Œ์ŠคํŠธ ํŒจํ‚ค์ง€๋“ค์„ devDependencies๋กœ ์˜ฎ๊น€

* feat: ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€์— react-query ์ ์šฉ

* feat : msw์— ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€ 404 ์˜ค๋ฅ˜ ์ถ”๊ฐ€

* ci: react-error-boundary ์„ค์น˜

* feat: Outlet์— QueryErrorResetBoundary,ErrorBoundary, Suspense ์ ์šฉ

* feat: ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€์— useSuspenseQuery ์ ์šฉ

* refactor: ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€ resource, queryString key ์ƒ์ˆ˜ํ™”

* refactor:  ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€ react-query key ์ƒ์ˆ˜ํ™”

* refactor: ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€ ์ปดํฌ๋„ŒํŠธ ์†์—์„œ๋งŒ ์‚ฌ์šฉํ•˜๋Š” ์ƒ์ˆ˜๋“ค ์ƒ์ˆ˜ํ™”

* refactor: DetailedReviewPage/components์— index.tsx๋ฅผ ์ถ”๊ฐ€ํ•ด import ๊ฒฝ๋กœ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ˆ˜์ •

* feat: error ์ „ํŒŒ๋ฅผ ์œ„ํ•œ QueryClient ์˜ต์…˜ ์ถ”๊ฐ€

-  react-query์˜ query, mutation์—์„œ error๊ฐ€ ์ „ํŒŒ๋˜๋„๋ก QueryClient ์˜ต์…˜ ์„ค์ •

* fix: ErrorPage์˜ SideModal์— closeModal props๋กœ ์คŒ

* refactor: ErrorSection ์œ„์น˜ ๋ณ€๊ฒฝ(src/pages/ErrorPage -> src/components/error)

* feat: ErrorFallback ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ

* feat: ErrorSuspenseContainer ์ƒ์„ฑ ๋ฐ App.tsx์— ์ ์šฉ

* chore: constants/index.ts export ๊ฒฝ๋กœ ๋ณ€๊ฒฝ

- ์ค‘๋ณต๋˜๋Š” apiErrorMessage ์‚ญ์ œ
- queryKeys ์ถ”๊ฐ€

* chore: 3์ฐจ-1์ฃผ์ฐจ ํ•ต์‹ฌ ๊ธฐ๋Šฅ ์‹œํ˜„ ๋•Œ ํ•„์š” ์—†๋Š” ์ฝ”๋“œ ์ฃผ์„ ์ฒ˜๋ฆฌ

* docs: ErrorPage์˜ ERROR_MESSAGE ์ˆ˜์ •

* design: formWidth ๋ณ€๊ฒฝ ๋ฐ fontSize์— 1.4rem ์ถ”๊ฐ€

* feat: ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€์— ๋ฆฌ๋ทฐ์ด ์ด๋ฆ„ ์ถ”๊ฐ€

- ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€ ๋ชฉ๋ฐ์ดํ„ฐ, ๋ฐ์ดํ„ฐ ํƒ€์ž…์— ๋ฆฌ๋ทฐ์ด ์ด๋ฆ„ ์ถ”๊ฐ€
- ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€ ์ปดํฌ๋„ŒํŠธ์— ๋ฆฌ๋ทฐ์ด ์ด๋ฆ„ ์ถ”๊ฐ€ ๋ฐ ๊ด€๋ จ ์Šคํƒ€์ผ ์ถ”๊ฐ€

* refactor: ๋ถˆํ•„์š”ํ•œ export ์‚ญ์ œ

* chore: type๋ช… ์ˆ˜์ • (RevieweeCommentProps =>RevieweeCommentsProps)

* refactor: ErrorSection์œผl Button ์ˆ˜์ •

* refactor: ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€ ๋ฐ์ดํ„ฐ ํƒ€์ž… ๋ณ€๊ฒฝ์— ๋”ฐ๋ฅธ ์ˆ˜์ •

* refactor: ErrorSuspenseContainer ์ ์šฉ ์œ„์น˜ ๋ณ€๊ฒฝ

- App๊ฐ€ ์•„๋‹Œ router์˜ element์—์„œ ์ ์šฉํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณ€๊ฒฝ

* refactor: ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€ ๋ฐ์ดํ„ฐ ํƒ€์ž… ๊ฐ•์ œ ๋ฐฉ๋ฒ• ๋ณ€๊ฒฝ

* chore: ๋ถˆํ•„์š”ํ•œ ์ฃผ์„ ์‚ญ์ œ

* refactor: ErrorSection์˜ buttons ๋„ค์ด๋ฐ ๋ณ€๊ฒฝ ๋ฐ ์š”์†Œ์— key ์ถ”๊ฐ€

- buttons -> buttonList

* chore: ์Šคํƒ€์ผ ์ฃผ์„์— NOTE ์ถ”๊ฐ€

* [BE] feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ์กฐํšŒ  (#179)

* feat: ๋ฆฌ๋ทฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ

Co-authored-by: nayonsoso <[email protected]>

* feat: ๋‚ด๊ฐ€ ๋ฐ›์€ ๋ฆฌ๋ทฐ ๋ชฉ๋ก ์‘๋‹ต ์ƒ์„ฑ

Co-authored-by: donghoony <[email protected]>

* feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ์กฐํšŒ

Co-authored-by: nayonsoso <[email protected]>

* refactor: Cascade ์ ์šฉ์œผ๋กœ ๋ถˆํ•„์š”ํ•œ save ์ œ๊ฑฐ

Co-authored-by: nayonsoso <[email protected]>

* refactor: ๋ฆฌ๋ทฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์ƒ์„ฑ ๊ฐ์ฒด ๋„์ถœ

Co-authored-by: nayonsoso <[email protected]>

---------

Co-authored-by: nayonsoso <[email protected]>

* fix: ๋ธŒ๋ผ์šฐ์ € ํƒ€์ดํ‹€ ์˜คํƒ€ ์ˆ˜์ • (#167)

* [BE] feat: ๋ฆฌ๋ทฐ ์ƒ์„ธ ์กฐํšŒ ๊ธฐ๋Šฅ ๊ตฌํ˜„ (#182)

* feat: ์ปจํŠธ๋กค๋Ÿฌ ๋ฆฌ๋ทฐ
์ƒ์„ธ ์กฐํšŒ api ์‘๋‹ต ๊ธฐ๋Šฅ ๊ตฌํ˜„

* feat: ๋ฆฌ๋ทฐ ์ƒ์„ธ ์กฐํšŒ api ์‘๋‹ต ๊ฐ์ฒด ๊ตฌํ˜„

* refactor: ๋ฆฌ๋ทฐ ์ƒ์„ธ ์กฐํšŒ api ์‘๋‹ต ๊ฐ์ฒด๋ช… ๋ณ€๊ฒฝ

* feat: ์„œ๋น„์Šค ๋ฆฌ๋ทฐ ์ƒ์„ธ ์กฐํšŒ ๊ธฐ๋Šฅ ๊ตฌํ˜„

* test: ๋ฆฌ๋ทฐ ์ƒ์„ธ ์กฐํšŒ ๊ธฐ๋Šฅ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

* style: ์˜คํƒ€ ๋ฐ ๊ฐœํ–‰ ์ˆ˜์ •

* refactor: ๋‚ ์งœ ์‘๋‹ต ์‹œ, ์ผ์ž๊นŒ์ง€๋งŒ ์‘๋‹ตํ•˜๋„๋ก ๋ณ€๊ฒฝ

* refactor: ๋ฆฌ๋ทฐ ์กฐํšŒ ๊ถŒํ•œ ๊ฒ€์ฆ ๋กœ์ง์„ repository ์‚ฌ์šฉํ•˜๋„๋ก ๋ณ€๊ฒฝ

* refactor: ๊ฒ€์ฆ๋ฉ”์„ธ์ง€ ๋ณ€๊ฒฝ

* refactor: ๋ฆฌ๋ทฐ ์„œ๋น„์Šค์—์„œ ๋ฆฌ๋ทฐ ๊ทธ๋ฃน์„ ์ฐพ์„ ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ์˜ˆ์™ธ ํด๋ž˜์Šค ๋ณ€๊ฒฝ

* refactor: ๋ฆฌ๋ทฐ ์ƒ์„ธ ์กฐํšŒ ๋ฉ”์„œ๋“œ๋ช… ๋ณ€๊ฒฝ

* refactor: ํ—ค๋”๋ช… ์ƒ์ˆ˜ํ™”

* [FE] recoil์„ ํ†ตํ•œ groupAccessCode ์ „์—ญ ์ƒํƒœ ๊ด€๋ฆฌ (#180)

* ci: recoil ์„ค์น˜

* feat: src/index.ts์— RecoilRoot ์ ์šฉ

* feat: groupAccessCode ์— ๋Œ€ํ•œ atom ์ƒํƒœ ์ถ”๊ฐ€

* feat: useGroupAccessCode ํ›… ์ถ”๊ฐ€

- useGroupAccessCode : groupAccessCode์˜ atom ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ํ›…

* [BE] ๋‚ด๊ฐ€ ๋ฐ›์€ ๋ฆฌ๋ทฐ ๋ชฉ๋ก์„ ์ตœ์‹ ์ˆœ์œผ๋กœ ์กฐํšŒํ•œ๋‹ค. (#189)

* fix: ๋‚ ์งœ ์ˆœ ์ •๋ ฌ

* refactor: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ณ€์ˆ˜ ์ œ๊ฑฐ

---------

Co-authored-by: donghoony <[email protected]>

* [BE] ์ดˆ๊ธฐ ๋ฐ์ดํ„ฐ ์„ค์ • (#187)

* feat: ์ดˆ๊ธฐ ๋ฐ์ดํ„ฐ ์„ค์ •

* build: CD ์‹œ local profile ์„ค์ •

---------

Co-authored-by: donghoony <[email protected]>

* [FE] feat: Alert Modal๊ณผ Error Alert Modal ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„ ๋ฐ Button ์ปดํฌ๋„ŒํŠธ ํ™•์žฅ (#165)

* refactor: ๊ณตํ†ต ๋ฒ„ํŠผ ์ปดํฌ๋„ŒํŠธ๊ฐ€ children๊ณผ style์„ ๋ฐ›๋„๋ก ์ˆ˜์ •

* chore: error alert modal์—์„œ ์‚ฌ์šฉํ•  primary ์ƒ‰์ƒ์˜ ๊ฒฝ๊ณ  ์‚ผ๊ฐํ˜• ์ถ”๊ฐ€

* feat: ErrorAlertModal ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„

* feat: AlertModal ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„

* chore: ๋ณ€๊ฒฝ๋œ Button ์ปดํฌ๋„ŒํŠธ์˜ ๊ตฌ์กฐ์— ๋งž๊ฒŒ ์ฝ”๋“œ ์ˆ˜์ •

* fix: AlertModal์ด Esc ๋˜๋Š” background์˜ ํด๋ฆญ์œผ๋กœ ๋‹ซํžˆ์ง€ ์•Š๋„๋ก ์ˆ˜์ •

* chore: AlertModal๊ณผ ErrorAlertModal export

* refactor: Button ์ปดํฌ๋„ŒํŠธ๊ฐ€ type์„ ๋ณ„๋„๋กœ ๋ฐ›๋„๋ก ์ˆ˜์ • ๋ฐ ๊ธฐ์กด์˜ buttonType์„ styleType์œผ๋กœ ๋ณ€๊ฒฝ

* refactor: background ํด๋ฆญ ๋˜๋Š” Esc ํ‚ค๋ฅผ ํ†ตํ•ด ๋ชจ๋‹ฌ์„ ๋‹ซ๋Š” ๊ฒƒ์„ ๋ถ„๋ฆฌ

* refactor: AlertModal์˜ ๋ชจ๋‹ฌ ๋‹ซ๋Š” ์ •์ฑ…์„ props๋กœ ์„ ํƒ ๊ฐ€๋Šฅํ•˜๋„๋ก ์ˆ˜์ •

* refactor: ErrorAlertModal์„ AlertModal์„ ์‚ฌ์šฉํ•ด ๊ตฌํ˜„

* refactor: ๋‹ซ๊ธฐ ๋ฒ„ํŠผ ์ด์™ธ์˜ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ชจ๋‹ฌ์„ ๋‹ซ์„ ์ˆ˜ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€์™€ handler๋ฅผ props๋กœ ์ „๋‹ฌ๋ฐ›๋„๋ก ๋ณ€๊ฒฝ

* refactor: ๋น„์–ด์žˆ๋Š” ์Šคํƒ€์ผ ์ปดํฌ๋„ŒํŠธ ์ œ๊ฑฐ

* [FE] ๋žœ๋”ฉ ํŽ˜์ด์ง€ ํผ๋ธ”๋ฆฌ์‹ฑ ๋ฐ ๋””๋ฐ”์šด์‹ฑ ํ•จ์ˆ˜ ์ถ”๊ฐ€ (#181)

* feat: Input ๊ณตํ†ต ์ปดํฌ๋„ŒํŠธ ์ œ์ž‘

* feat: LandingPage ์ œ์ž‘

* fix: Input์˜ type์„ text๋กœ ์ˆ˜์ •

* feat: debounce ํ•จ์ˆ˜ ์ž‘์„ฑ

* docs: debounce ํ•จ์ˆ˜์— TODO ์ฃผ์„ ๋ฐ TSdoc ์ถ”๊ฐ€ ์™ธ ๊ฐ„๋‹จํ•œ if๋ฌธ ๋ฆฌํŒฉํ† ๋ง

* chore: ์ž˜๋ชป๋œ ํŒŒ์ผ ๊ตฌ์กฐ ๋ฐ ๋””๋ ‰ํ† ๋ฆฌ๋ช… ์ˆ˜์ •

* chore: px์„ rem์œผ๋กœ ์ˆ˜์ •

* refactor: ๋™์  ์Šคํƒ€์ผ๋ง์— css ๋Œ€์‹  styled ์Šคํƒ€์ผ ์ ์šฉ

* refactor: Input ์Šคํƒ€์ผ์„ ๋”์šฑ ์œ ์—ฐํ•˜๊ฒŒ ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก ์ˆ˜์ •, ์Šคํƒ€์ผ ๋ฆฌํ„ฐ๋Ÿด ์ œ๊ฑฐ

* refactor: Input์— ์ ์šฉ๋œ ์ปค์Šคํ…€ ์Šคํƒ€์ผ๋ง์„ $style๋กœ ์ˆ˜์ •

* fix: undefined ๋ฆฌํ„ด์„ null ๋ฆฌํ„ด์œผ๋กœ ์ˆ˜์ •

* refactor: flex-direction์— ๋ณ„๋„์˜ ์ปค์Šคํ…€ ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹  React ๋‚ด์žฅ ํƒ€์ž…์„์‚ฌ์šฉํ•˜๋„๋ก ์ˆ˜์ •

* refactor: Input ์ปดํฌ๋„ŒํŠธ์—์„œ rest props ์ œ๊ฑฐ

* chore: ๋ถˆํ•„์š”ํ•œ import ์ œ๊ฑฐ

* [FE] feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํŽ˜์ด์ง€์— ๋ณ€๊ฒฝ๋œ API ์—ฐ๋™ ํ›„, ๋ฆฌ์•กํŠธ ์ฟผ๋ฆฌ ์ ์šฉ ๋ฐ ๋ฌดํ•œ ์Šคํฌ๋กค ๊ตฌํ˜„ (#192)

* design: ๋ฆฌ๋ทฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์นด๋“œ ๋ฐฐ๊ฒฝ์ƒ‰ ๋ณ€๊ฒฝ ๋ฐ ์ „์ฒด ๊ฐ์‹ธ๋Š” div์— ์•„๋ž˜์ชฝ ์—ฌ๋ฐฑ ์ถ”๊ฐ€

* refactor: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ์ธํ„ฐํŽ˜์ด์Šค ์ถ”๊ฐ€ ๋ฐ ์ˆ˜์ •

- ReviewPreviewList ์ธํ„ฐํŽ˜์ด์Šค ์ถ”๊ฐ€
  - size, lastReviewId, reviews ํ•„๋“œ ์ถ”๊ฐ€
- ReviewPreview ์ธํ„ฐํŽ˜์ด์Šค ์ˆ˜์ •
  - keywords ํ•„๋“œ๋ฅผ Keyword[] ํƒ€์ž…์œผ๋กœ ๋ณ€๊ฒฝ

* chore: ๋‹ซํžŒ ์ž๋ฌผ์‡ ๋กœ ์•„์ด์ฝ˜ ๋ณ€๊ฒฝ

* feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํŽ˜์ด์ง€์—์„œ ๋ฆฌ์•กํŠธ ์ฟผ๋ฆฌ ์ ์šฉ

* refactor: ์›น ์ ‘๊ทผ์„ฑ์„ ์œ„ํ•œ alt, aria-label ์ถ”๊ฐ€ ๋ฐ ์ฝ”๋“œ ์ปจ๋ฒค์…˜์— ๋งž์ถฐ ์ฝ”๋“œ ์ˆ˜์ •

* feat: ๋ฆฌ๋ทฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๋ฆฌ์ŠคํŠธ ํ•ธ๋“ค๋Ÿฌ์— ํŽ˜์ด์ง€๋„ค์ด์…˜ ๋กœ์ง ์ถ”๊ฐ€

- ๊ธฐ์กด์˜ ๋‹จ์ˆœ ๋ฐ˜ํ™˜ ํ•ธ๋“ค๋Ÿฌ์—์„œ ํŽ˜์ด์ง€๋„ค์ด์…˜ ๊ธฐ๋Šฅ์„ ํฌํ•จํ•œ ํ•ธ๋“ค๋Ÿฌ๋กœ ์ˆ˜์ •

* feat: `SideModal` ์ปดํฌ๋„ŒํŠธ์— `closeModal` prop ์ถ”๊ฐ€

* feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํŽ˜์ด์ง€์— ๋ฌดํ•œ ์Šคํฌ๋กค ๊ธฐ๋Šฅ ์ถ”๊ฐ€

* refactor: useReviewPreviewList ํ›… ์ƒ์„ฑํ•˜์—ฌ ๋ฐ์ดํ„ฐ ํ˜ธ์ถœ ๋กœ์ง ๋ถ„๋ฆฌ

* refactor: ๋ถˆํ•„์š”ํ•œ ButtonContainer ์ œ๊ฑฐ

* design: px์„ rem์œผ๋กœ ๋ณ€๊ฒฝ

* refactor: Button ์ปดํฌ๋„ŒํŠธ์— key ์ถ”๊ฐ€

* feat: ๋ฆฌ๋ทฐ์ด, ํ”„๋กœ์ ํŠธ๋ช…์„ ๋ณด์—ฌ์ฃผ๋Š” DescriptionSection ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„

* refactor: ๋ฆฌ๋ทฐ ๋ชฉ๋ก์„ ๋ถˆ๋Ÿฌ์˜ค๋Š” api ๋ณ€๊ฒฝ ์ด์Šˆ๋กœ ์ธํ•ด ์—”๋“œํฌ์ธํŠธ, fetch ํ•จ์ˆ˜ ์ˆ˜์ •

* chore: fragment ์ œ๊ฑฐ

* refactor: api ๋ณ€๊ฒฝ์— ๋”ฐ๋ผ ReviewPreviewList, ReviewPreview ์ธํ„ฐํŽ˜์ด์Šค ์ˆ˜์ •

* refactor: ๋ณ€๊ฒฝ๋œ api์— ๋”ฐ๋ผ props ์ˆ˜์ •

* refactor: reviewerGroup, isPublic ์ œ๊ฑฐ

* refactor: endPoint.gettingReviewList ํ˜ธ์ถœ ์ธ์ž ๋ณ€๊ฒฝ

* refactor: DescriptionSection์—์„œ ReviewInfoSection์œผ๋กœ ์ปดํฌ๋„ŒํŠธ๋ช… ๋ณ€๊ฒฝ

* refactor: useSuspenseQuery ์ ์šฉ ํ›„, ๋ฌดํ•œ์Šคํฌ๋กค ๊ด€๋ จ ์ฝ”๋“œ ์ฃผ์„ ์ฒ˜๋ฆฌ

---------

Co-authored-by: badahertz52 <[email protected]>

* [FE] feat: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํŽ˜์ด์ง€์™€ ์„œ๋ฒ„ ๋ฐ ๋ชจ๋‹ฌ ์—ฐ๋™ (#191)

* chore: ๋ณ€๊ฒฝ๋œ UI ์ ์šฉ

* design: ํ‚ค์›Œ๋“œ ๋ฌธํ•ญ ์•ˆ๋‚ด ๋ฌธ๊ตฌ ์ˆ˜์ •

* feat: Textarea ๊ณตํ†ต ์ปดํฌ๋„ŒํŠธ ๋ผˆ๋Œ€ ๊ตฌํ˜„

* chore: ์ˆ˜์ •๋œ api ์—”๋“œํฌ์ธํŠธ ๋ฐ queryparams ์ ์šฉ

* design: reset.ts ์ถ”๊ฐ€ ์„ค์ •

* chore: ๋ณ€๊ฒฝ๋œ api ๋ฌธ์„œ์— ๋งž๊ฒŒ ํƒ€์ž… ์ˆ˜์ •

* feat: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํŽ˜์ด์ง€์™€ ๋ชจ๋‹ฌ ๋ฐ ์„œ๋ฒ„ ์—ฐ๋™

* chore: ์‚ฌ์ด๋“œ๋ฐ” ๋ฉ”๋‰ด ํด๋ฆญ ์‹œ ์ด๋™ํ•  path ์ˆ˜์ •

* fix: ConfirmModal์—์„œ background ํด๋ฆญ ์‹œ ๋ชจ๋‹ฌ์ด ๋‹ซํžˆ์ง€ ์•Š๋Š” ํ˜„์ƒ ์ˆ˜์ •

* design: AlertModal ๋ฐ ErrorAlertModal ๋””์ž์ธ ์ˆ˜์ •

* chore: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ๋ฐ ์ž‘์„ฑ ์™„๋ฃŒ ํŽ˜์ด์ง€ ๋ผ์šฐํ„ฐ ์ถ”๊ฐ€

* chore: ๋ถˆํ•„์š”ํ•œ ์ฃผ์„ ์ œ๊ฑฐ ๋ฐ ์‚ฌ์ด๋“œ๋ฐ”์—์„œ ๋ฆฌ๋ทฐ ์ž‘์„ฑ ๋ฉ”๋‰ด ์ˆจ๊น€ ์ฒ˜๋ฆฌ

* chore: ๋ฆฌ๋ทฐ ์ œ์ถœ ํŽ˜์ด์ง€ ๋ฒ„ํŠผ ํƒ€์ž… ๋ช…์‹œ

* chore: svg import ์ปจ๋ฒค์…˜์— ๋งž๊ฒŒ ์ˆ˜์ •

* [FE] ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํŽ˜์ด์ง€, ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€์—์„œ ๋กœ๊ทธ์ธ์„ ์—ฐ๋™ (#193)

* design: ๋ฆฌ๋ทฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์นด๋“œ ๋ฐฐ๊ฒฝ์ƒ‰ ๋ณ€๊ฒฝ ๋ฐ ์ „์ฒด ๊ฐ์‹ธ๋Š” div์— ์•„๋ž˜์ชฝ ์—ฌ๋ฐฑ ์ถ”๊ฐ€

* refactor: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ์ธํ„ฐํŽ˜์ด์Šค ์ถ”๊ฐ€ ๋ฐ ์ˆ˜์ •

- ReviewPreviewList ์ธํ„ฐํŽ˜์ด์Šค ์ถ”๊ฐ€
  - size, lastReviewId, reviews ํ•„๋“œ ์ถ”๊ฐ€
- ReviewPreview ์ธํ„ฐํŽ˜์ด์Šค ์ˆ˜์ •
  - keywords ํ•„๋“œ๋ฅผ Keyword[] ํƒ€์ž…์œผ๋กœ ๋ณ€๊ฒฝ

* chore: ๋‹ซํžŒ ์ž๋ฌผ์‡ ๋กœ ์•„์ด์ฝ˜ ๋ณ€๊ฒฝ

* feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํŽ˜์ด์ง€์—์„œ ๋ฆฌ์•กํŠธ ์ฟผ๋ฆฌ ์ ์šฉ

* refactor: ์›น ์ ‘๊ทผ์„ฑ์„ ์œ„ํ•œ alt, aria-label ์ถ”๊ฐ€ ๋ฐ ์ฝ”๋“œ ์ปจ๋ฒค์…˜์— ๋งž์ถฐ ์ฝ”๋“œ ์ˆ˜์ •

* feat: ๋ฆฌ๋ทฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๋ฆฌ์ŠคํŠธ ํ•ธ๋“ค๋Ÿฌ์— ํŽ˜์ด์ง€๋„ค์ด์…˜ ๋กœ์ง ์ถ”๊ฐ€

- ๊ธฐ์กด์˜ ๋‹จ์ˆœ ๋ฐ˜ํ™˜ ํ•ธ๋“ค๋Ÿฌ์—์„œ ํŽ˜์ด์ง€๋„ค์ด์…˜ ๊ธฐ๋Šฅ์„ ํฌํ•จํ•œ ํ•ธ๋“ค๋Ÿฌ๋กœ ์ˆ˜์ •

* feat: `SideModal` ์ปดํฌ๋„ŒํŠธ์— `closeModal` prop ์ถ”๊ฐ€

* feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํŽ˜์ด์ง€์— ๋ฌดํ•œ ์Šคํฌ๋กค ๊ธฐ๋Šฅ ์ถ”๊ฐ€

* refactor: useReviewPreviewList ํ›… ์ƒ์„ฑํ•˜์—ฌ ๋ฐ์ดํ„ฐ ํ˜ธ์ถœ ๋กœ์ง ๋ถ„๋ฆฌ

* refactor: ๋ถˆํ•„์š”ํ•œ ButtonContainer ์ œ๊ฑฐ

* design: px์„ rem์œผ๋กœ ๋ณ€๊ฒฝ

* refactor: Button ์ปดํฌ๋„ŒํŠธ์— key ์ถ”๊ฐ€

* feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก,๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€ api ํ•ธ๋“ค๋Ÿฌ์—์„œ groupAccessCode๋ฅผ header์— ์ถ”๊ฐ€

* feat: DetailedReviewPage ์—์„œ groupAccessCode ์ƒํƒœ ์ ์šฉ

* feat: LoginRedirectModal ์ƒ์„ฑ

* refactor: ErrorSection ๋ฆฌํŒฉํ† ๋ง

* feat: ๋ฆฌ๋ทฐ์ด, ํ”„๋กœ์ ํŠธ๋ช…์„ ๋ณด์—ฌ์ฃผ๋Š” DescriptionSection ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„

* refactor: ๋ฆฌ๋ทฐ ๋ชฉ๋ก์„ ๋ถˆ๋Ÿฌ์˜ค๋Š” api ๋ณ€๊ฒฝ ์ด์Šˆ๋กœ ์ธํ•ด ์—”๋“œํฌ์ธํŠธ, fetch ํ•จ์ˆ˜ ์ˆ˜์ •

* feat: ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€์— groupAccessCode ์ƒํƒœ๋ฅผ ์ ์šฉ

- ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€์— groupAccessCode ์ƒํƒœ๊ฐ’์ด ์žˆ์œผ๋ฉด api์š”์ฒญ์„ ํ•˜๊ณ  ์—†์œผ๋ฉด LoginRedirectModal์„ ๋„์–ด์„œ ๋กœ๊ทธ์ธ ์œ ๋„ํ•˜๋Š” ๊ธฐ๋Šฅ ์ถ”๊ฐ€
- DetailedPage/index.tsx์— ์žˆ๋˜ ๋‚ด์šฉ์„ DetailedReivewPageContents๋กœ ์ด๋™
-  DetailedPage/index.tsx์—์„œ ErrorSuspenseContainer ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ˆ˜์ •

* chore: fragment ์ œ๊ฑฐ

* refactor: api ๋ณ€๊ฒฝ์— ๋”ฐ๋ผ ReviewPreviewList, ReviewPreview ์ธํ„ฐํŽ˜์ด์Šค ์ˆ˜์ •

* fix: ๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€ keyword ํƒ€์ž… ๋ณ€๊ฒฝ์— ๋”ฐ๋ฅธ ์ˆ˜์ •

* refactor: ๋ณ€๊ฒฝ๋œ api์— ๋”ฐ๋ผ props ์ˆ˜์ •

* refactor: reviewerGroup, isPublic ์ œ๊ฑฐ

* feat: ErrorFallback ์˜ ํ™ˆ ์ด๋™ ๊ฒฝ๋กœ ๋ณ€๊ฒฝ

* refactor: endPoint.gettingReviewList ํ˜ธ์ถœ ์ธ์ž ๋ณ€๊ฒฝ

* refactor: DetailedReviewPage์—์„œ groupAccessCode ๊ฐ€์ ธ์˜ค๋Š” ๋ฐฉ์‹ ๋ณ€๊ฒฝ

- useRecoilValue๊ฐ€ ์•„๋‹Œ useGroupAccessCode์—์„œ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์œผ๋กœ ๋ณ€๊ฒฝ

* refactor: DescriptionSection์—์„œ ReviewInfoSection์œผ๋กœ ์ปดํฌ๋„ŒํŠธ๋ช… ๋ณ€๊ฒฝ

* refactor: ErrorPage์—์„œ Home ์ด๋™ ๋ฒ„ํŠผ์„ ์œ ๋„ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝ

- route์˜ค๋ฅ˜ ๋ฉ”์„ธ์ง€์™€ api์˜ค๋ฅ˜ ๋ฉ”์„ธ์ง€๋ฅผ errorMessage ํŒŒ์ผ์—์„œ ๊ด€๋ฆฌํ•˜๋„๋ก ์ˆ˜์ •
- ErrorPage์—์„œ errorMessage๊ฐ€ ROUTE_ERROR_MESSAGE์ด๋ฉด ํ™ˆ ๋ฒ„ํŠผ์ด ํ™”๋ฉด์ƒ์—์„œ ๋จผ์ € ๋‚˜์˜ค๋„๋ก ์ˆ˜์ •
- ์ƒ‰์ƒ๋ณ„ ํ™ˆ,refresh ์•„์ด์ฝ˜ SVG ์ถ”๊ฐ€

* refactor: useSuspenseQuery ์ ์šฉ ํ›„, ๋ฌดํ•œ์Šคํฌ๋กค ๊ด€๋ จ ์ฝ”๋“œ ์ฃผ์„ ์ฒ˜๋ฆฌ

* feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํŽ˜์ด์ง€ ๋ชฉ ์„œ๋ฒ„ ํ•ธ๋“ค๋Ÿฌ ๋ฐ ๋ชฉ๋ฐ์ดํ„ฐ ์ˆ˜์ •

* feat: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํŽ˜์ด์ง€์—  groupAccessCode ์ „์—ญ ์ƒํƒœ ์ ์šฉ

* refactor: ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ ์‚ญ์ œ

* chore: ์˜คํƒ€ ์ˆ˜์ •

---------

Co-authored-by: soosoo22 <[email protected]>

* [FE] feat: ๋žœ๋”ฉ ํŽ˜์ด์ง€ API ์—ฐ๋™ (#196)

* feat: ๊ทธ๋ฃน ์ƒ์„ฑ์„ ์œ„ํ•œ ์—”๋“œํฌ์ธํŠธ ์ƒ์„ฑ ๋ฐ ๋ฆฌ๋ทฐ ๋ชฉ๋ก ์—”๋“œํฌ์ธํŠธ, api ํ˜ธ์ถœ ํ•จ์ˆ˜ ์ˆ˜์ •

* fix: CSSProperties ๋Œ€์‹  ์ปค์Šคํ…€ ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜๋˜ ์ธํ„ฐํŽ˜์ด์Šค ์ˆ˜์ •

* feat: ReviewAccessForm์— ๋ชจ๋‹ฌ ๋ฐ API ์—ฐ๊ฒฐ

* fix: ๋ˆ„๋ฝ๋๋˜ CopyIcon ํŒŒ์ผ ์—…๋กœ๋“œ

* feat: ํ™•์ธ ์ฝ”๋“œ ์ž…๋ ฅ API ์—ฐ๋™

* feat: ์™„์ „ํ•œ ๋ฆฌ๋ทฐ ์ž‘์„ฑ URL์„ ๋ฆฌํ„ดํ•˜๋Š” ํ•จ์ˆ˜ ์ž‘์„ฑ

* [FE] fix: ๋ˆ„๋ฝ๋๋˜ ๋ฒ„ํŠผ ๋ฆฌํŒฉํ† ๋ง ๋ฐ ์—”๋“œํฌ์ธํŠธ ๋ณต๊ตฌ (#199)

* fix: ์ถฉ๋Œ ํ•ด๊ฒฐ ๊ณผ์ •์—์„œ ๋ˆ„๋ฝ๋๋˜ ์—”๋“œํฌ์ธํŠธ ๋ณต๊ตฌ

* fix: ๋ฒ„ํŠผ ๋ฆฌํŒฉํ† ๋ง ๋ฐ˜์˜

* feat: textarea์— ์ตœ์†Œ ์ž…๋ ฅ ๊ธ€์ž ์ˆ˜๋ฅผ ๋งŒ์กฑํ•˜์ง€ ๋ชปํ•œ ๊ฒฝ์šฐ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ ํ‘œ์‹œ ๊ธฐ๋Šฅ ๊ตฌํ˜„ (#200)

* feat: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ์™„๋ฃŒ ํŽ˜์ด์ง€์—์„œ ํ™ˆ ๋ฒ„ํŠผ ์ถ”๊ฐ€ (#201)

* docs: ๋ฆฌ๋ทฐ๋ฏธ ์†Œ๊ฐœ๊ธ€ ์ž‘์„ฑ (#203)

* [BE] refactor: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฉ”์„œ๋“œ ์ œ๊ฑฐ, ์ปจ๋ฒค์…˜ ๋ฐ ์ž‘์€ ๋ฆฌํŒฉํ† ๋ง (#206)

* refactor: date๋ฅผ review๊ฐ€ ์ œ๊ณตํ•˜๋„๋ก ์ˆ˜์ •

* style: ์ปจ๋ฒค์…˜ ์ ์šฉ

* refactor: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฉ”์„œ๋“œ ์ œ๊ฑฐ

* refactor: ๋ฉ”์„œ๋“œ๋ช… ํ†ต์ผ

* style: ๋ถˆํ•„์š”ํ•œ ๊ฐœํ–‰ ์ œ๊ฑฐ

* [FE] jest ์‚ฌ์šฉ ์‹œ nodeํ™˜๊ฒฝ ์† msw ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ์™€ ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์˜ค๋ฅ˜  ํ•ด๊ฒฐ (#215)

* ci: dependencies์—์„œ jest ์‚ญ์ œ ๋ฐ ts-jest ์„ค์น˜

* ci: jest์—์„œ ์ ˆ๋Œ€ ๊ฒฝ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก  jest.config.js ์ถ”๊ฐ€

* chore: eslint์ ์šฉ ์ œ์™ธ ํŒŒ์ผ์— jest.config.js, tsconfig.json ์ถ”๊ฐ€

* ci: jest์˜ testEnvioronment๋ฅผ jsdom์œผ๋กœ ์„ค์ •

* fix: jest์—์„œ msw ver2๋ฅผ ๋ชฉ์„œ๋ฒ„๋กœ ์‚ฌ์šฉ ์‹œ ์ƒ๊ธฐ๋Š” ์˜ค๋ฅ˜ ์ˆ˜์ •

1. msw/node ๋ฅผ ์ฝ์ง€ ๋ชปํ•จ
- jest.config.js์˜ testEnvironment ๋นˆ๋ฌธ์ž์—ด

2. ReferentError: TextEnCoder is not defined
- ํ•ด๊ฒฐ : jest.polyfills.js ์ถ”๊ฐ€ ๋ฐ undici ์„ค์น˜

3. ReferenceError: ReadableStream is not defined
- ํ•ด๊ฒฐ : undici ๋‹ค์šด ๊ทธ๋ ˆ์ด๋“œ
undici": "^6.19.5", -> "^5.0.0"

* ci : jest์—์„œ env ํŒŒ์ผ ์ฝ์„ ์ˆ˜ ์žˆ๋„๋ก dotenv ์„ค์น˜ ๋ฐ jest์— ์ ์šฉ

* [FE] ๊ฐœ๋ฐœํ™˜๊ฒฝ๊ณผ ๋นŒ๋“œํ™˜๊ฒฝ์— ๋”ฐ๋ผ msw ์‹คํ–‰ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•˜๋„๋ก msw ์‹คํ–‰ ์กฐ๊ฑด๋ฌธ ๊ฐœ์„   (#221)

* ci: ๋นŒ๋“œ ํŒŒ์ผ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” http-server ํŒจํ‚ค์ง€ ์„ค์น˜ ๋ฐ ์‹คํ–‰ ๋ช…๋ น์–ด ์ถ”๊ฐ€

* fix:๊ฐœ๋ฐœ ํ™˜๊ฒฝ๊ณผ ๋นŒ๋“œ/๋ฐฐํฌ ํ™˜๊ฒฝ์„ ๊ตฌ๋ถ„ํ•ด ๋ชฉ ์„œ๋ฒ„๋ฅผ ์‹คํ–‰ํ•˜๋„๋ก ์กฐ๊ฑด๋ฌธ ๊ฐœ์„ 

* fix: ๋จธ์ง€ ์ถฉ๋Œ ์‹œ yarn.lock ์‚ญ์ œํ•œ ๊ฑฐ ๋ณต๊ตฌ

* [FE] ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€ query ํ›… ๋ถ„๋ฆฌ ๋ฐ HTTP ์š”์ฒญ ํ…Œ์ŠคํŠธ ์ง„ํ–‰  (#216)

* refactor: DetailedPage/index.tsx ๋ฆฌํŒฉํ† ๋ง

- early return๋ฅผ ์‚ฌ์šฉํ•ด ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์„ ๋†’์ž„

* feat: useGetDetailedReview ํ›… ์ƒ์„ฑ ๋ฐ DetailedReviewPageContents์— ์ ์šฉ

* feat: useSearchParamAndQuery ํ›… ์ƒ์„ฑ ๋ฐ DetailedPageContent์— ์ ์šฉ

* refactor: ๋ฆฌ๋ทฐ ์ƒ์„ธํŽ˜์ด์ง€์—์„œ id๋ผ๊ณ  ์‚ฌ์šฉํ–ˆ๋˜ key๊ฐ’, params์˜ key๋ฅผ reviewId๋กœ ๋ณ€๊ฒฝ

- DetailedReview์˜ router param์„ id์—์„œ reviewId๋กœ ๋ณ€๊ฒฝ

* ci: dependencies์—์„œ jest ์‚ญ์ œ ๋ฐ ts-jest ์„ค์น˜

* ci: jest์—์„œ ์ ˆ๋Œ€ ๊ฒฝ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก  jest.config.js ์ถ”๊ฐ€

* chore: eslint์ ์šฉ ์ œ์™ธ ํŒŒ์ผ์— jest.config.js, tsconfig.json ์ถ”๊ฐ€

* ci: jest์˜ testEnvioronment๋ฅผ jsdom์œผ๋กœ ์„ค์ •

* refactor: useGetDetailedReview์—์„œ query ๊ฒฐ๊ณผ๋ฅผ ๋ชจ๋‘ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝ

* fix: jest์—์„œ msw ver2๋ฅผ ๋ชฉ์„œ๋ฒ„๋กœ ์‚ฌ์šฉ ์‹œ ์ƒ๊ธฐ๋Š” ์˜ค๋ฅ˜ ์ˆ˜์ •

1. msw/node ๋ฅผ ์ฝ์ง€ ๋ชปํ•จ
- jest.config.js์˜ testEnvironment ๋นˆ๋ฌธ์ž์—ด

2. ReferentError: TextEnCoder is not defined
- ํ•ด๊ฒฐ : jest.polyfills.js ์ถ”๊ฐ€ ๋ฐ undici ์„ค์น˜

3. ReferenceError: ReadableStream is not defined
- ํ•ด๊ฒฐ : undici ๋‹ค์šด ๊ทธ๋ ˆ์ด๋“œ
undici": "^6.19.5", -> "^5.0.0"

* ci : jest์—์„œ env ํŒŒ์ผ ์ฝ์„ ์ˆ˜ ์žˆ๋„๋ก dotenv ์„ค์น˜ ๋ฐ jest์— ์ ์šฉ

* fix: mock ํ•ธ๋“ค๋Ÿฌ์ธ getDetailedReview ์—์„œ ์ค‘๋ณต๋œ ์ฟผ๋ฆฌ ๋งค๊ฐœ ๋ณ€์ˆ˜ ์‚ฌ์šฉ ์ˆ˜์ •

- ์˜ค๋ฅ˜ ์ƒํ™ฉ:  jest์—์„œ msw ์‚ฌ์šฉ ์‹œ, get์˜ url์— ํŒŒ๋ผ๋ฏธํ„ฐ ์‚ฌ์šฉ ์‹œ ์ค‘๋ณต๋œ ์ฟผ๋ฆฌ ๋งค๊ฐœ ๋ณ€์ˆ˜ ์˜ค๋ฅ˜๊ฐ€ ๋‚จ
- ์˜ค๋ฅ˜ ๋ฉ”์„ธ์ง€ ::Found a redundant usage of query parameters in the request handler
- ํ•ด๊ฒฐ:  ๋ฆฌ๋ทฐ ์ƒ์„ธ๋ณด๊ธฐ ํŽ˜์ด์ง€์˜ reviews๊นŒ์ง€์˜ url ์ƒ์ˆ˜๋ฅผ ๋งŒ๋“ค๊ณ , get์—์„œ๋Š” ์ด ์ƒ์ˆ˜๋ฅผ  ํ™œ์šฉํ•œ ์ •๊ทœํ‘œํ˜„์‹์œผ๋กœ ๋ฆฌ๋ทฐ ์ƒ์„ธ๋ณด๊ธฐ ํŽ˜์ด์ง€๋กœ ์˜ค๋Š” ๋ชจ๋“  ์š”์ฒญ์„ ๊ฐ€๋กœ์ฑŒ ์ˆ˜ ์žˆ๋„๋ก  ํ•จ

* refactor: getWrongDetailedReview ๋ชฉ์„œ๋ฒ„ ํ•ธ๋“ค๋Ÿฌ ๋ฐ ๊ด€๋ จ ์ƒ์ˆ˜ ์‚ญ์ œ

- getDetailedReview์—์„œ request๋ฅผ ๋ถ„์„ํ•ด http์˜ค๋ฅ˜ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•จ

* feat: queryClientWrapper ์ƒ์„ฑ

- queryClientWrapper : msw๋ฅผ ์‚ฌ์šฉํ•œ jest ํ…Œ์ŠคํŠธ์— queryWrapper๋กœ ์‚ฌ์šฉ

* test:๋ฆฌ๋ทฐ ์ƒ์„ธ ํŽ˜์ด์ง€ api ์š”์ฒญ ์„ฑ๊ณต์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

* fix: groupAccessCodeAtom์˜ ๊ธฐ๋ณธ๊ฐ’ ์›๋ž˜๋Œ€๋กœ ๋ณต๊ตฌ

* chore:queryClientWrapper ๋„ค์ด๋ฐ ํ‘œ๊ธฐ๋ฒ•์„  ํŒŒ์Šค์นผ ์ผ€์ด์Šค๋กœ ๋ณ€๊ฒฝ

* fix: ๋จธ์ง€ ์ถฉ๋Œ ๋ฐฉ์ง€๋ฅผ ์œ„ํ•ด yarn.lock ์‚ญ์ œ

* fix:  ๋จธ์ง€ ์‹œ yarn.lock ์ถฉ๋Œ ํ•ด๊ฒฐ

* [FE] test: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํŽ˜์ด์ง€์— API ์—ฐ๋™ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€ ๋ฐ ๋ฆฌํŒฉํ† ๋ง (#217)

* chore: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํŽ˜์ด์ง€ ๊ด€๋ จ ์ปดํฌ๋„ŒํŠธ ๋ฐ ์ธํ„ฐํŽ˜์ด์Šค, ํŒŒ์ผ ์ด๋ฆ„ ๋ณ€๊ฒฝ

* refactor: api ์—”๋“œํฌ์ธํŠธ ์ƒ์ˆ˜ ์ ์šฉ

* refactor: useGetReviewList ํ›…์œผ๋กœ ๋ถ„๋ฆฌ

* test: ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํŽ˜์ด์ง€ api ์—ฐ๋™ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

* chore: msw ๋ชจํ‚น ์ฝ”๋“œ ์ œ๊ฑฐ

* chore: ๊ฒฝ๋กœ index ์ œ๊ฑฐ

* fix: ์ค‘๋ณต๋œ import ๋ฐ ๋ถˆํ•„์š”ํ•œ ํ•ธ๋“ค๋Ÿฌ ์ œ๊ฑฐ

* chore: ์—”๋“œํฌ์ธํŠธ ์ƒ์ˆ˜ ์ œ๊ฑฐ

* [FE] refactor: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํŽ˜์ด์ง€ ๋ฆฌํŒฉํ† ๋ง (#219)

* refactor: ๊ฐ ๋ชจ๋‹ฌ๋ณ„๋กœ ์ƒํƒœ์™€ ๋™์ž‘์„ ๊ด€๋ฆฌํ•˜๋Š” ํ›… ๋ถ„๋ฆฌ

* refactor: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํผ์˜ ๋กœ์ง์„ ํ›…์œผ๋กœ ๋ถ„๋ฆฌ

* refactor: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํŽ˜์ด์ง€์— ๋ถ„๋ฆฌํ•œ ํ›… ์ ์šฉ

* refactor: URL์—์„œ reviewRequestCode๋ฅผ ์ถ”์ถœํ•˜๋Š” ๋กœ์ง์„ ํ›…์œผ๋กœ ๋ถ„๋ฆฌ

* chore: ๋ถˆํ•„์š”ํ•œ ํ…Œ์ŠคํŠธ์šฉ ์ฝ”๋“œ ์ œ๊ฑฐ

* chore: ErrorModal์„ ๋‹ซ์„ ๋•Œ errorMessage ์ƒํƒœ๋„ ์ดˆ๊ธฐ๊ฐ’์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋„๋ก ์ˆ˜์ •

* [BE] feat: ํ—ค๋” ์กด์žฌ ์—ฌ๋ถ€ ๊ฒ€์ฆ (#207)

* fix: ์ธํ„ฐํŽ˜์ด์Šค์™€ ๊ตฌํ˜„์ฒด ์–ด๋…ธํ…Œ์ด์…˜ ์ผ์น˜

* feat: ํ—ค๋” ๊ฒ€์‚ฌ ์–ด๋…ธํ…Œ์ด์…˜

* feat: ํ—ค๋” ๋ฐธ๋ฆฌ๋ฐ์ดํ„ฐ

* feat: ์ปจํŠธ๋กค๋Ÿฌ์— ํ—ค๋” ๊ฒ€์‚ฌ

* feat: ํ—ค๋” ๊ฒ€์ฆ ๋ฉ”์‹œ์ง€ ํด๋ผ์ด์–ธํŠธ์— ์ „๋‹ฌ

* fix: ๋ˆ„๋ฝ๋œ `@Valid` ์–ด๋…ธํ…Œ์ด์…˜ ์ถ”๊ฐ€

* refactor: ์š”์ฒญ์ด null์ธ ๊ฒฝ์šฐ ํ•ธ๋“ค๋ง

* chore: ํ…Œ์ŠคํŠธ ์ด๋ฆ„ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ๋ณ€๊ฒฝ

* chore: ์†Œ๋ฌธ์ž ์ปจ๋ฒค์…˜

* feat: ArgumentResolver๋ฅผ ํ™œ์šฉํ•œ ํ—ค๋” ๊ฒ€์ฆ

* feat: ๊ณต์šฉ ํŒจํ‚ค์ง€๋กœ ์ด๋™ ๋ฐ ๋ฒ”์šฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ˆ˜์ •

* chore: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” import ์ œ๊ฑฐ

* feat: ArgumentResolver ์ ์šฉ, Validator ์‚ญ์ œ

* chore: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ปค์Šคํ…€ ์˜ˆ์™ธ ์›๋ณต

* refactor: ํ—ค๋” ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ๋ฉ”์‹œ์ง€ ์ˆ˜์ •

* chore: ๋ถˆํ•„์š”ํ•œ `@Valid` ์–ด๋…ธํ…Œ์ด์…˜ ์‚ญ์ œ

* refactor: ๋ณ€์ˆ˜ ์ถ”์ถœ

Co-authored-by: Yeongseo Na <[email protected]>

* fix: ์ปดํŒŒ์ผ ์—๋Ÿฌ ํ•ด๊ฒฐ

---------

Co-authored-by: Yeongseo Na <[email protected]>

* ci: index.html์— ๊ตฌ๊ธ€ ์• ๋„๋ฆฌํ‹ฑ์Šค ์ ์šฉ (#226)

* [FE] ci: sentry ์ดˆ๊ธฐ ์„ค์ • (#223)

* ci: sentry ์ดˆ๊ธฐ ์„ค์ •

* chore: gitignore์— env.sentry-build-plugin ์ถ”๊ฐ€

* ci: sentry ์ ์šฉ ํ”„๋กœ์ ํŠธ๋ฅผ woowacoure-review-me๋กœ ๋ณ€๊ฒฝ, ๋กœ์ปฌ ํ™˜๊ฒฝ ์ถ”์ ํ•˜๋„๋ก ๋ณ€๊ฒฝ

* ci: sentry ์ ์šฉ ํ™˜๊ฒฝ์„ ๋ฐฐํฌ ํ™˜๊ฒฝ์œผ๋กœ ๋‹ค์‹œ ๋ณ€๊ฒฝ

* ci: sentry์—์„œ replay ๊ด€๋ จ ์„ค์ • ์‚ญ์ œ

---------

Co-authored-by: badahertz52 <[email protected]>

* [FE] refactor: LandingPage์— ๋ฆฌ์•กํŠธ ์ฟผ๋ฆฌ ์ ์šฉ ๋ฐ ๋ฆฌํŒฉํ† ๋ง (#218)

* chore: LandingPage์˜ styles ํŒŒ์ผ ๋ถ„๋ฆฌ

* fix: POST ์š”์ฒญ์„ ํ•˜๋Š” ํ•จ์ˆ˜์˜ ์ด๋ฆ„์„ post~๋กœ ์ˆ˜์ •

* feat: ๊ทธ๋ฃน ๋ฐ์ดํ„ฐ ์ƒ์„ฑ ์š”์ฒญ์— ๋Œ€ํ•œ MSW ํ•ธ๋“ค๋Ÿฌ ์ถ”๊ฐ€

* refactor: ๋ชจํ‚น ๋ฐ์ดํ„ฐ ๊ฐ’์„ ๋” ์ง๊ด€์ ์œผ๋กœ ์ˆ˜์ •

* refactor: LandingPage๋ฅผ ErrorSuspenseContainer๊ฐ€ ๊ฐ์‹ธ๋„๋ก ์ˆ˜์ •

* refactor: URL์„ ์–ป์–ด์˜ค๋Š” API์— react-query ์ ์šฉ ๋ฐ API ํ˜ธ์ถœ ํ•จ์ˆ˜ ์ด๋ฆ„ ์ˆ˜์ •

* chore: LandingPage ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ๋“ค์˜ index ํŒŒ์ผ ์ถ”๊ฐ€ ๋ฐ ์ ์šฉ

* refactor: groupAccessCode ๊ด€๋ จ msw ํ•ธ๋“ค๋Ÿฌ ์ถ”๊ฐ€ ๋ฐ ์—๋Ÿฌ ์ƒํƒœ(์—†๋Š” ์ฝ”๋“œ ์ž…๋ ฅ, ์„œ๋ฒ„ ์—๋Ÿฌ)์— ๋”ฐ๋ฅธ ์—๋Ÿฌ ๋ฉ”์„ธ์ง€๋ฅผ ์ถœ๋ ฅํ•˜๋„๋ก ์ˆ˜์ •

* refactor: groupAccessCode์— ์•ŒํŒŒ๋ฒณ ๋Œ€์†Œ๋ฌธ์ž์™€ ์ˆซ์ž๋งŒ ์˜ฌ ์ˆ˜ ์žˆ๋„๋ก ์ˆ˜์ •

* refactor: LandingPage์—์„œ ErrorSuspenseContainer๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ๋Œ€์‹  URLGeneratorForm๋งŒ์„ ๊ฐ์‹ธ๋„๋ก ์ˆ˜์ •

* refactor: Input ์ปดํฌ๋„ŒํŠธ์˜ onChange ์ด๋ฒคํŠธ ํƒ€์ž… ์ˆ˜์ •

* refactor: Input ์ปดํฌ๋„ŒํŠธ์— name ์†์„ฑ ์ถ”๊ฐ€

* refactor: ์ˆ˜์ •๋œ ๊ฒฝ๋กœ ๋ฐ˜์˜

* refactor: usePostDataForUrl ์ฟผ๋ฆฌ์—์„œ mutation์„ ๋ฆฌํ„ดํ•˜๋„๋ก ์ˆ˜์ •

* refactor: URL์„ ์„ฑ๊ณต์ ์œผ๋กœ ์ƒ์„ฑํ•œ ์ดํ›„ Input์„ ๋ฆฌ์…‹ํ•˜๋Š” ํ•จ์ˆ˜ ์ถ”๊ฐ€

* chore: NOTE ์ฃผ์„ ์ถ”๊ฐ€

* refactor: getIsValidGroupAccessCodeApi์—์„œ 400 ์™ธ์˜ ์—๋Ÿฌ ์ฒ˜๋ฆฌ๋ฅผ ๊ธฐ์กด์˜ createApiErrorMessage๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์ˆ˜์ •

* chore: ๋ˆ„๋ฝ๋๋˜ -Api suffix ๋ฐ˜์˜

* [BE] Actuator ์ ์šฉ๊ณผ logback ์„ค์ • (#228)

* build: actuator ์˜์กด์„ฑ ์ถ”๊ฐ€

* feat: ๋กœ๊ทธ๋ฐฑ ์„ค์ •

* feat: submodule ์ ์šฉ

- actuator ์„ค์ •์„ ์„œ๋ธŒ ๋ชจ๋“ˆ์— ์ €์žฅ

* style: ๊ฐœํ–‰ ๋ฐ ์ฃผ์„ ์ œ๊ฑฐ

* test: logback ์„ค์ • ์ถ”๊ฐ€

* [FE] CD test (#233)

* ci: sentry ์ดˆ๊ธฐ ์„ค์ •

* chore: ์„œ๋น„์Šค ํƒ€์ดํ‹€ ๋Œ€๋ฌธ์ž๋กœ ๋ณ€๊ฒฝ

* chore: merge

* [BE] ํ”„๋กœํŒŒ์ผ ๋ถ„๋ฆฌ, CD ์Šคํฌ๋ฆฝํŠธ ์ˆ˜์ • (#235)

* feat: ํ”„๋กœํŒŒ์ผ ๋ถ„๋ฆฌ

* feat: ํ”„๋กœํŒŒ์ผ ๋ถ„๋ฆฌ

* cd: ํ”„๋กœํŒŒ์ผ ๋ถ„๋ฆฌ cd ์Šคํฌ๋ฆฝํŠธ ์ˆ˜์ •

* fix: CD ์Šคํฌ๋ฆฝํŠธ ์˜คํƒ€ ์ˆ˜์ • (#236)

* [FE] CD test 2 (#237)

* ci: sentry ์ดˆ๊ธฐ ์„ค์ •

* chore: ์„œ๋น„์Šค ํƒ€์ดํ‹€ ๋Œ€๋ฌธ์ž๋กœ ๋ณ€๊ฒฝ

* chore: merge

* fix: sentry ์žฌ์„ค์ •

* fix: sentry ์„ค์ • ๋ณต๊ตฌ

* fix: cd ์Šคํฌ๋ฆฝํŠธ ์˜คํƒ€ ์ˆ˜์ • (#238)

* [FE] CD TEST 3 (#239)

* ci: sentry ์ดˆ๊ธฐ ์„ค์ •

* chore: ์„œ๋น„์Šค ํƒ€์ดํ‹€ ๋Œ€๋ฌธ์ž๋กœ ๋ณ€๊ฒฝ

* chore: merge

* fix: sentry ์žฌ์„ค์ •

* fix: sentry ์„ค์ • ๋ณต๊ตฌ

* chore: ์„œ๋น„์Šค ํƒ€์ดํ‹€ ๋ณ€๊ฒฝ

* [BE] build: Micrometer ์˜์กด์„ฑ ์ถ”๊ฐ€ (#244)

* build: ๋งˆ์ดํฌ๋กœ๋ฏธํ„ฐ ์˜์กด์„ฑ ์ถ”๊ฐ€

Co-authored-by: hyeonjilee <[email protected]>
Co-authored-by: nayonsoso <[email protected]>

* chore: ์„œ๋ธŒ๋ชจ๋“ˆ ์—…๋ฐ์ดํŠธ

Co-authored-by: hyeonjilee <[email protected]>
Co-authored-by: nayonsoso <[email protected]>

---------

Co-authored-by: hyeonjilee <[email protected]>
Co-authored-by: nayonsoso <[email protected]>

* [FE] feat: ๊ณตํ†ต ์ปดํฌ๋„ŒํŠธ์ธ ์ฒดํฌ๋ฐ•์Šค์™€ ์ฒดํฌ๋ฐ•์Šค ์•„์ดํ…œ ์ œ์ž‘ (#240)

* feat: ๊ณตํ†ต ์ฒดํฌ๋ฐ•์Šค ์ปดํฌ๋„ŒํŠธ ์ž‘์„ฑ

* feat: ์ฒดํฌ๋ฐ•์Šค์— ๋ ˆ์ด๋ธ”์„ ๋‹ฌ ์ˆ˜ ์žˆ๋Š” CheckboxItem ์ปดํฌ๋„ŒํŠธ ์ž‘์„ฑ

* fix: style์„ ์ž˜๋ชป ์ „๋‹ฌํ•˜๋˜ ๋ฌธ์ œ ํ•ด๊ฒฐ

* [BE] fix: CD ์Šคํฌ๋ฆฝํŠธ ์ˆ˜์ • (#246)

* fix: CD ์Šคํฌ๋ฆฝํŠธ ์ˆ˜์ •

* chore: ์ €์žฅ ๋ฐ์ดํ„ฐ dev์—์„œ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ˆ˜์ •

* [FE] refactor: LandingPage ๊ฒฝ๋กœ ๋ณ€๊ฒฝ (#249)

* refactor: LandingPage์˜ ๊ฒฝ๋กœ ๋ณ€๊ฒฝ

* refactor: App ์—์„œ ์‚ฌ์ด๋“œ๋ฐ” ์ฃผ์„ ์ฒ˜๋ฆฌ

* [BE] Swagger API ๋ฌธ์„œ ์—…๋ฐ์ดํŠธ (#254)

* docs: ๋ฆฌ๋ทฐ api ๋ฌธ์„œ๋ฅผ ์œ„ํ•œ swagger ์–ด๋…ธํ…Œ์ด์…˜ ์ถ”๊ฐ€

* refactor: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” dto ์‚ญ์ œ

* docs: api ๋ฌธ์„œ์— ์ตœ์†Œ ๋ฐ ์ตœ๋Œ€ ์„ค์ • ์•ˆ๋‚ด ์ถ”๊ฐ€

* docs: ๋ฆฌ๋ทฐ ๊ทธ๋ฃน api๋ฅผ ์œ„ํ•œ swagger ์–ด๋…ธํ…Œ์ด์…˜ ์ถ”๊ฐ€

* refactor: Spring์—์„œ ์ œ๊ณตํ•˜๋Š” APPLICATION_JSON_VALUE ์‚ฌ์šฉ

* [BE] feat: ์˜ˆ์™ธ์— ๋Œ€ํ•œ ๋กœ๊ทธ ์ž‘์„ฑ (#255)

* feat: Controller advice ์— ๋กœ๊น… ์ถ”๊ฐ€

* refactor: ์Šคํƒ ํŠธ๋ ˆ์ด์Šค ๋กœ๊น… ์ถ”๊ฐ€

* feat: ๋ฆฌ๋ทฐ๊ทธ๋ฃน ์ƒ์„ฑ์‹œ ๊ธธ์ด ๊ฒ€์ฆ ๋กœ๊น… ์ถ”๊ฐ€

* feat: ๋‹ต๋ณ€ ๊ธธ์ด ๊ฒ€์ฆ ๋กœ๊น… ์ถ”๊ฐ€

* feat: ๋ฆฌ๋ทฐ ๊ทธ๋ฃน ์ฝ”๋“œ ๊ฒ€์ฆ ๊ฒ€์ฆ ๋กœ๊น… ์ถ”๊ฐ€

* feat: ๋ฆฌ๋ทฐ ์กฐํšŒ ๊ฒ€์ฆ ๊ฒ€์ฆ ๋กœ๊น… ์ถ”๊ฐ€

* feat: ์„ ํƒ๋œ ํ‚ค์›Œ๋“œ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒ€์ฆ ๋กœ๊น… ์ถ”๊ฐ€

* feat: ์ค‘๋ณต ์„ ํƒ๋œ ํ‚ค์›Œ๋“œ ๊ฒ€์ฆ ๋กœ๊น… ์ถ”๊ฐ€

* feat: ํ‚ค์›Œ๋“œ ์กฐํšŒ ๊ฒ€์ฆ ๋กœ๊น… ์ถ”๊ฐ€

* feat: ์„ ํƒ ํ‚ค์›Œ๋“œ ๊ฐฏ์ˆ˜ ๊ฒ€์ฆ ๋กœ๊น… ์ถ”๊ฐ€

* feat: ์„ ํƒ๋œ ์งˆ๋ฌธ ์ค‘๋ณต ๊ฒ€์ฆ ๋กœ๊น… ์ถ”๊ฐ€

* feat: ์งˆ๋ฌธ ์กฐํšŒ ๊ฒ€์ฆ ๋กœ๊น… ์ถ”๊ฐ€

* feat: ์ค‘๋ณต ์งˆ๋ฌธ ๊ฒ€์ฆ ๋กœ๊น… ์ถ”๊ฐ€

* feat: ์Šคํ”„๋ง ๋ฐœ์ƒ ์˜ˆ์™ธ ๋กœ๊น…์— ๋ฉ”์„ธ์ง€ ์ถ”๊ฐ€

* feat: ์ธ์ฝ”๋”ฉ ์„ค์ •

* style: ๊ฐœํ–‰ ์ˆ˜์ •

Co-authored-by: Donghoon Lee <[email protected]>

* style: ๊ฐœํ–‰ ๋ฐ ๊ณต๋ฐฑ ์ˆ˜์ •

* refactor: ๋ถˆํ•„์š”ํ•œ ๊ฒ€์ฆ ์ œ๊ฑฐ

- ์„ ํƒ๋œ ํ‚ค์›Œ๋“œ์™€ ์งˆ๋ฌธ์ด DB์— ์žˆ๋Š”์ง€๋ฅผ validator ์—์„œ ๊ฒ€์ฆํ•œ ํ›„์—๋„, repository.getById ๋ฅผ ํ•  ๋•Œ ํ•œ๋ฒˆ ๋” ๊ฒ€์ฆ์ด ๋“ค์–ด๊ฐ„๋‹ค. ๋”ฐ๋ผ์„œ 'DB์— ์žˆ๋Š”์ง€'์— ๋Œ€ํ•œ ๊ฒ€์ฆ์„ validator ์—์„œ ํ•  ํ•„์š”๋Š” ์—†๋‹ค๋Š” ํŒ๋‹จ ํ•˜์— ํ•ด๋‹น ๋กœ์ง์„ ์‚ญ์ œํ•œ๋‹ค.

---------

Co-authored-by: Donghoon Lee <[email protected]>

* [FE] refactor:  Textarea๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ณตํ†ต ์žฅ๋ฌธํ˜• ๋‹ต๋ณ€ ์ž…๋ ฅ ์ปดํฌ๋„ŒํŠธ ๋ถ„๋ฆฌ (#252)

* feat: ๊ณตํ†ต textarea ์ปดํฌ๋„ŒํŠธ ์ž‘์„ฑ

* refactor: longReviewItem์˜ ๋กœ์ง์„ ์ปค์Šคํ…€ ํ›…์œผ๋กœ ๋ถ„๋ฆฌ

* refactor: longReviewItem์œผ๋กœ ์ด๋ฆ„ ๋ณ€๊ฒฝ ๋ฐ ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„

* chore: ๊ธฐ์กด์˜ ReviewItem ์ œ๊ฑฐ ๋ฐ ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํŽ˜์ด์ง€์— LongReviewItem ์ ์šฉ

* [FE] refactor: ๊ณต์šฉ ๋ชจ๋‹ฌ ํ›… ์ถ”๊ฐ€ ๋ฐ LongReviewItem ๋ฆฌํŒฉํ† ๋ง (#258)

* feat: ๋ชจ๋‹ฌ ์ƒํƒœ ๊ด€๋ฆฌ ํ›… ์ถ”๊ฐ€

* refactor: LongReviewItem ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์™ธ๋ถ€์˜ event๋ฅผ props๋กœ ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก ๋ณ€๊ฒฝ

* [FE] test: LandingPage์—์„œ ์‚ฌ์šฉํ•˜๋Š” API์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ (#251)

* chore: ๋ถˆํ•„์š”ํ•œ Fragment ์ œ๊ฑฐ

* test: LandingPage์—์„œ ์‚ฌ์šฉํ•˜๋Š” api ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

* [FE] refactor: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํŽ˜์ด์ง€์— react query๋ฅผ ์ ์šฉํ•˜๊ณ  API ์—ฐ๋™ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ (#256)

* refactor: ๋ฆฌ๋ทฐ ์ž‘์„ฑ์„ ์œ„ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๋กœ์ง์— react query ์ ์šฉ

* refactor: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํ›„ ๊ฒŒ์‹œ ์š”์ฒญ ๋กœ์ง์— useMutation ์ ์šฉ

* refactor: query key ์ƒ์ˆ˜ํ™” ๋ฐ ๋ฆฌ๋ทฐ ์ž‘์„ฑ์„ ์œ„ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๋กœ์ง์„ useReviewForm์—์„œ ์ œ๊ฑฐ

* chore: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ํŽ˜์ด์ง€์— ErrorSuspenseContainer ์ ์šฉ

* chore: styled component๋ช… ์ˆ˜์ •

* chore: ๋ฆฌ๋ทฐ ์ž‘์„ฑ์„ ์œ„ํ•œ mock data๋ฅผ ๋ณ€๊ฒฝ๋œ api ํ˜•์‹์— ๋งž๊ฒŒ ์ˆ˜์ •

* chore: useGetDataToWrite๊ฐ€ ๋” ๋งŽ์€ ๋ฐ˜ํ™˜๊ฐ’์„ ์ œ๊ณตํ•˜๋„๋ก ์ˆ˜์ •

* test: useGetDataToWrite์˜ API ์š”์ฒญ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ

* chore: dataToWrite๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ ์ƒํƒœ ๊ธฐ๋ณธ๊ฐ’ ์ง€์ •

* chore: msw๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฆฌ๋ทฐ ์ƒ์„ฑ post ์š”์ฒญ mocking

* chore: ๋ฆฌ๋ทฐ ์ •๋ณด mocking data ์ƒ์„ฑ

* chore: useMutationReview๊ฐ€ UseMutationResult ํƒ€์ž… ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ์„ค์ •

* test: useMutateReview์˜ API ์š”์ฒญ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ

* chore: useGetDataToWrite์˜ ๋ฐ˜ํ™˜๊ฐ’์„ ๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ˆ˜์ •

* chore: LongReviewItem ์ปดํฌ๋„ŒํŠธ ์ ์šฉ

* [FE] fix: ์งˆ๋ฌธ ๋ฒˆํ˜ธ๊ฐ€ ์ž˜๋ชป ์ถœ๋ ฅ๋˜๋Š” ์˜ค๋ฅ˜ ๋ฐ ๋ฆฌ๋ทฐ ์ž‘์„ฑ ์™„๋ฃŒ ์‹œ ์ž˜๋ชป๋œ ๊ฒฝ๋กœ๋กœ ์ด๋™ํ•˜๋Š” ์˜ค๋ฅ˜ ์ˆ˜์ • (#265)

* fix: ์งˆ๋ฌธ ๋ฒˆํ˜ธ๊ฐ€ ์ž˜๋ชป ์ถœ๋ ฅ๋˜๋Š” ์˜ค๋ฅ˜ ์ˆ˜์ •

* fix: ๋ฆฌ๋ทฐ ์ž‘์„ฑ ์™„๋ฃŒ ์‹œ ์ž˜๋ชป๋œ ๊ฒฝ๋กœ๋กœ ์ด๋™๋˜๋Š” ๋ฌธ์ œ ์ˆ˜์ •

* [BE] feat: ์งˆ๋ฌธ ๋ฆฌ๋ทฐ์ด ์ด๋ฆ„์œผ๋กœ ์น˜ํ™˜ (#262)

* chore: cd ํ…Œ์ŠคํŠธ ํ™•์ธ ์ฝ”๋“œ ์ž‘์„ฑ (#272)

* fix: ์ƒ์„ธ ๋‚ด์šฉ ํ‘œ์‹œํ•  ๋•Œ ๋ฆฌ๋ทฐ์ด ์ด๋ฆ„ ์น˜ํ™˜ (#270)

* [FE] feat: ํด๋ฆฝ๋ณด๋“œ ๋ณต์‚ฌ ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„ (#261)

* feat: ํด๋ฆฝ๋ณด๋“œ ๋ณต์‚ฌ ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„

Co-authored-by: skylar1220 <[email protected]>

* fix: ๋ถ€๋ชจ ์š”์†Œ์˜ ๋„ˆ๋น„์— ๋”ฐ๋ผ CopyTextButton์ด ์ž‘์•„์ง€๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ

* refactor: ReviewGroupDataModal ์Šคํƒ€์ผ ์กฐ์ • - ์ „์ฒด ํฌ๊ธฐ ์ง€์ • ๋ฐ gap ์กฐ์ •

* chore: ๋ถˆํ•„์š”ํ•œ padding ์ œ๊ฑฐ

* chore: index ํŒŒ์ผ์— CopyTextButton ์ถ”๊ฐ€

---------

Co-authored-by: skylar1220 <[email protected]>

* [FE] chore: front_deploy๋ฅผ develop์— ๋ฐ˜์˜ (#276)

* [FE] feat: ์งˆ๋ฌธ ์ž‘์„ฑ ํŽ˜์ด์ง€ QuestionCard, ReviewWritingCard ๊ณตํ†ต ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ค๊ณ , ์Šฌ๋ผ์ด๋” ๋ฐฉ์‹์˜ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ (#247)

* chore: .gitignore์—์„œ ์ฃผ์„ ์ œ๊ฑฐ

* feat: QuestionCard ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„

* feat: ReviewWritingCard ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„

* style: CSS ์†์„ฑ ์ˆœ์„œ ์ •๋ ฌ

* refactor: ์ œ๋ชฉ๊ณผ ๋‚ด์šฉ์„ ๊ฐ๊ฐ Header์™€ Main ์„น์…˜์œผ๋กœ ๋ถ„๋ฆฌ

* feat: ์Šฌ๋ผ์ด๋” ๋ฐฉ์‹์œผ๋กœ ์งˆ๋ฌธ ์นด๋“œ๊ฐ€ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ „ํ™˜๋˜๋Š” ๊ธฐ๋Šฅ ์ถ”๊ฐ€

* design: pretendard ํฐํŠธ ์ ์šฉ

* chore: ํ—ค๋” review me ๋Œ€๋ฌธ์ž๋กœ ๋ณ€๊ฒฝ

* refactor: QuestionCard, ReviewWritingCard ํด๋” ์œ„์น˜ ๋ณ€๊ฒฝ

- ReviewWritingFormPage์˜ components๋กœ ์ด๋™

* [FE] ์งˆ๋ฌธ ์ž‘์ • ํŽ˜์ด์ง€์— ํ•„์š”ํ•œ ์งˆ๋ฌธ ๋ชฉ ๋ฐ์ดํ„ฐ ๋ฐ ์นด๋“œ์˜ ์ƒํƒœ ์ฒ˜๋ฆฌ (#263)

* [BE] fix: CD ์Šคํฌ๋ฆฝํŠธ ์ˆ˜์ • (#246)

* fix: CD ์Šคํฌ๋ฆฝํŠธ ์ˆ˜์ •

* chore: ์ €์žฅ ๋ฐ์ดํ„ฐ dev์—์„œ ํ™œ์šฉํ•  ์ˆ˜โ€ฆ
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants